Только пусть пользователи вводят положительные целые числа (без десятичных знаков или строк)?
Я знаю, как попросить пользователя ввести положительные целые числа, но я не знаю, как подойти к коду, чтобы избежать ошибки ввода, такой как десятичный или строковый ввод.
int seedValue;
double angle, gunpowder;
System.out.println("Please enter a positive integer seed value: ");
seedValue = input.nextInt();
while (seedValue <= 0) {
System.out.println("Please enter a positive integer seed value: ");
seedValue = input.nextInt();
}
System.out.println("That target is " +
threeDec.format(gen.nextDouble() * 1000) + "m away.");
5 ответов
это может быть approch:
- читать как
string
значение с помощьюScanner.readLine();
- попытаться преобразовать строку в int с помощью
Integer.parseInt
метод. Этот метод будет бросатьNumberFormatException
в случае, если входная строка содержит десятичные и недействительных цифр. - если входное значение правильно проанализировано на предыдущем шаге, проверьте отрицательное
System.out.println("Please enter a positive integer seed value: ");
boolean flag = true;
while(flag) {
try {
seedValue = Integer.valueOf(input.nextLine());
if (seedValue <= 0) {
System.out.println("input is not a positive Integer ");
System.out.println("Please enter a positive integer seed value: ");
} else {
flag=false;
}
} catch(NumberFormatException e) {
System.out.println("input is not a positive Integer ");
System.out.println("Please enter a positive integer seed value: ");
}
}
Я предполагаю, что "вход" - это первоклассный сканер. Если да, проверьте javadoc для сканера.nextInt() метод. Он создает ряд исключений, если целое число не введено. Поэтому вы должны поставить свой вызов в блок try catch и искать эти исключения. Следующее, что вы можете сделать, так как это все еще позволяет им вводить отрицательное значение, - просто проверить, меньше ли вход 0, и если да, выведите какое-то сообщение, сообщающее пользователю, что они должны ввести только положительное значение.
ваша попытка выглядит нормально, вы позволяете пользователю ввести что-то, а затем проверить, соответствует ли она требуемой форме. Если нет, продолжайте спрашивать пользователя снова или выводить ошибку или что-то еще. Если вы хотите сделать программу таким образом, чтобы буквы, такие как символ" -", даже не появлялись на экране во время ввода, вам все равно нужно прочитать все, что ввел пользователь, проверить его, реформировать строку (удалить незаконную букву) и обновить экран с каждым нажатием клавиши. Это вероятно, не то, что следует делать здесь.
представьте, что ваши общие социальные сайты при создании профиля с требованиями пароля, как иметь один номер, по крайней мере 6 букв и так далее. Вы можете ввести все, что хотите, в текстовое поле, только после отправки формы программа либо принимает ваш ввод, либо перенаправляет вас в ту же форму с сообщением об ошибке, чтобы намекнуть на проблему.
Я не уверен, что класс input
- это точно, но я предполагаю, что его Scanner
чтение из стандартного по. Если это так, вы можете воспользоваться исключений nextInt()
, в частности InputMismatchException
. Ваш код будет -
int seedValue;
double angle, gunpowder;
System.out.println("Please enter a positive integer seed value: ");
while(invalidInput){
try{
seedValue = input.nextInt();
if(seedValue <= 0) {
System.out.println("Please enter a positive integer seed value: ");
}
else{invalidInput=false;}
}
catch(InputMismatchException e){
System.out.println("Please enter a positive integer seed value: ");
}
}
System.out.println("That target is " +
threeDec.format(gen.nextDouble() * 1000) + "m away.");