#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’ был доступен вне цикла, вы должны объявить его снаружи (в данном случае до). Далее читайте о: область действия!