Как я могу снова запросить ввод вместо просто ошибки

#java

#java

Вопрос:

Итак, я хочу запросить у пользователя ввод. Дело в том, что я также хочу, чтобы программа выдавала сообщение об ошибке и снова запрашивала ввод, если пользователь вместо числа попытается ввести что-то, что не является числом.

 public class Mystuff {
    public static void main(String[] args) {
        System.out.println("Write your string");
        String s = SubProgram.string();
        System.out.println("The string: "  s);
        int i = SubProgram.getInt();
        System.out.println("The int: "  i);    
    }
}
  

Классы:

 import java.util.Scanner;

public class SubProgram {
    private static final Scanner INPUT = new Scanner(System.in);
    
    public static String string() {
        String s = INPUT.nextLine();
        return s;
    }

    public static int getInt(){
            System.out.println("Write your number");
            int num = INPUT.nextInt();
            return num;
    
}
}
  

Комментарии:

1. Поместите запрос на ввод в цикл. Вы остаетесь в цикле, пока пользователь не введет допустимое значение.

2. Задавали ли вы этот вопрос ранее, например, ранее сегодня (воскресенье)?

Ответ №1:

Как вам уже сообщили, используйте цикл, например:

 public static int getInt(){
    String num = null;
    while (num == null) {
        System.out.println("Write your number");
        num = INPUT.nextLine();
        if (!num.matches("\d ")) {
            System.err.println("Invalid number supplied! ("   num   ")"); 
            num = null;
        }
    }
    return Integer.valueOf(num);
  

}

Ответ №2:

Чтобы что-то повторить, используйте цикл.

Основной шаблон:

  do {
    print a prompt;
    read input;
    validate input;
    if not valid, print error message;
 } while (valid input has not been provided);
  

Разумный подход заключается в установке некоторого флага (скажем, valid ) true или false на шаге «проверка ввода», а затем выполняется цикл while (!valid) .

Для использования nextInt() он выдаст исключение, если ввод не является допустимым целым числом. Вам нужно будет перехватить это исключение (см. try-catch Инструкцию) и использовать его для установки «недопустимо».

   do {
      try {
         ..blah blah
         n = scanner.nextInt();
         valid = true;
      }
      catch (NumberFormatException ex) {
         print error here;
         valid = false;
      }
 }  while (!valid);
  

Я надеюсь, что с помощью этих эскизов решения вы сможете написать фактический код.

Комментарии:

1. Спасибо, но теперь у меня есть еще одна проблема… Когда я пытаюсь вернуть его, всегда говорите, что есть проблема. Если я попытаюсь вернуться внутрь try , он скажет This method must return a result of type int , если я попытаюсь вернуться после while того, как он скажет num cannot be resolved to a variable

2. Все пути кода должны возвращать значение, а не только то, которое находится внутри try внутри цикла. Если вы хотите, чтобы ‘num’ был доступен вне цикла, вы должны объявить его снаружи (в данном случае до). Далее читайте о: область действия!