Только пусть пользователи вводят положительные целые числа (без десятичных знаков или строк)?

Я знаю, как попросить пользователя ввести положительные целые числа, но я не знаю, как подойти к коду, чтобы избежать ошибки ввода, такой как десятичный или строковый ввод.

  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.");