Я новичок в программировании и работаю над назначением Java, в котором пользователь называет файл. Затем файл передается методу для записи пользователем оценок за тест, а затем передается другому методу для чтения и отображения оценок за тест со средним значением класса.
В настоящее время я работаю над методом записи оценок студентов в файл, который я успешно выполнил, но мне нужно реализовать проверку ошибок, если введено нечисловое значение. Я использовал цикл while с try and catch для InputMismatchException, цикл иногда работает. Если недопустимый ввод введен на первой итерации цикла, он поймает его и повторит, однако, если недопустимый ввод будет введен на любой другой итерации, кроме первой, он поймает InputMismatchException, но он также выйдет из цикла и продолжит к следующему методу. Как заставить цикл запускаться на недействительной итерации цикла. Я был бы признателен за любую помощь, и мне очень жаль, если мой код написан плохо, поскольку я новичок в программировании.
Вот метод, над которым я работаю:
public static void inputScores(String newFile)
{
Scanner scan = new Scanner(System.in);
Formatter write;
try
{
write = new Formatter(newFile +".txt");
double score = 0.0;
int count = 1;
boolean again = false;
while(!again){
try
{
while(score >= 0)
{
System.out.print("Please enter student " + count + "'s test score, input -1 to quit:\n>");
score = scan.nextDouble();
again = true;
count++;
if (score >= 0)
{
write.format("%.2f%n", score);
}
else if (score <= -1)
{
break;
}
}
}
catch(InputMismatchException ex){
System.out.println("Invalid input, Student's scores must be a number");
scan.next();
}
}
write.close();
}
catch(FileNotFoundException e)
{
System.out.println(e.getMessage());
}
}




Try this code. Hope this will fulfill your requirement.
public static void inputScores(String newFile) {
Scanner scan = new Scanner(System.in);
Formatter write=null;
try {
write = new Formatter(newFile + ".txt");
double score = 0.0;
int count = 1;
while(true) {
try {
System.out.println("Please enter student " + count + "'s test score, input -1 to quit:\n>");
score = scan.nextDouble();
count++;
if (score>=0)
write.format("%.2f%n", score);
else
break;
}catch (InputMismatchException e) {
System.err.println("Invalid input, Student's scores must be a number");
scan.next();
System.out.println();
}
}
write.close();
scan.close();
}
catch (FileNotFoundException e) {
System.out.println(e.getMessage());
}
}
Да! Это работает. Большое вам спасибо, вы очень цените!
@EiffelFlowers. Если вы получили свой ответ, проголосуйте и отметьте, что ответили, или, если у вас недостаточно репутации, то, по крайней мере, он понравится.
catch(InputMismatchException ex){ again = false; }?