0

Так что я пишу код здесь просто для удовольствия, но я придумал ошибку, которую я просто не могу исправить. Этот блок кода должен принимать int ... сначала я имел hasNextInt() только в цикле while, чтобы попытаться гарантировать, что я получаю правильный ввод, но поскольку судьба будет иметь это. Я получил исключение. Затем я добавил попытку поймать его, думая, может быть, я просто сделал что-то не так ... и все же я получаю ту же ошибку. Я не знаю, что здесь не так. это на самом деле мой первый раз, используя блок catch try (все еще вид noob). это выглядит хорошо для меня, и я просмотрел документацию в Интернете и сделал небольшое исследование, но безрезультатно. может ли кто-нибудь определить, что здесь не так? проверить это:InputMismatchException ... даже с try/catch

do{ 
    System.out.println("How much AP do you want to allocate towards HP? "); 

    try {//added try catch... still throwing the exception.. 

     while(!in.hasNextInt()){//this should've been enough, apparently not 
      System.out.println("That is not a valid input, try again."); 
      in.nextInt(); 
      } 
    } catch (InputMismatchException e) { 
     System.out.print(e.getMessage()); //trying to find specific reason. 
    } 
    hpInput = in.nextInt(); 
}while(hpInput < 0 || hpInput > AP); 

если я вошел в строку было бы дать мне «Это не действительный вход, попробуйте еще раз.» line, но исключение все равно произойдет сразу же после того, как будет только после того, как будет обнаружен фактический int ... help plz ..

+0

Вы задаете вопрос назад, вы проверяете, является ли вход действительным, а затем попросите пользователя ввести новое значение ... Возможно, было бы лучше получить ввод как 'String', а затем используйте другой «Сканер», чтобы проверить его ... – MadProgrammer

+0

Я вижу ... хорошо, я попробую сейчас, спасибо. –

ответ

0

Вы не можете действительно проверить значение в Scanner, пока что-то не было введено, но как только это вход, это слишком поздно, чтобы проверить его ...

Вместо этого, вы можете использовать второй Scanner для проверки String результата вы получаете от пользователя через клавиатуру, например

Scanner kbd = new Scanner(System.in); 
int result = -1; 
do { 
    System.out.println("How much AP do you want to allocate towards HP? "); 
    String value = kbd.nextLine(); 
    Scanner validate = new Scanner(value); 
    if (validate.hasNextInt()) { 
     result = validate.nextInt(); 
    } 
} while (result < 0); 
+0

Так что позвольте мне просто попытаться понять это больше ... значение here = kbd.nextLine(), которое я думал только для строковых вводов? однако, если вместо строки вводится int ... она просто принимает ее. Я что-то упускаю? Кстати, это работает сейчас, поэтому большое вам спасибо, я просто пытаюсь понять, что здесь делает код. –

+0

Yep, 'kdb.nextLine' в основном обрабатывает все новые маркеры строк от ввода и возвращает их как' String', тогда вы можете выполнить дополнительную «проверку» при использовании отдельного «сканера», в этом случае ... – MadProgrammer

2

Ваши while цикл должен выглядеть примерно так

while(!in.hasNextInt()){ // <-- is there an int? 
    System.out.println("That is not a valid input, try again."); 
    // in.nextInt(); // <-- there is not an int... 
    in.next(); // <-- this isn't an int. 
} 

Поскольку Scanner не имеет int.

Смежные вопросы