2016-06-28 3 views
1

Я делаю программу, которая просит вашего возраста, но она не работает. Сначала он спрашивает, сколько вам лет, с помощью модуля сканера и помещает ваш возраст в переменную. Я хочу, чтобы вывести в конце вашего возраста, но она нуждается в Int, так что если вы поставите строку или что-то другое, что дает ошибку:Как я могу заставить программу получить переменную внутри цикла? (java)

Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Unknown Source) 
at java.util.Scanner.next(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at org.asking.age.main(asking.java:18) 

Я хочу, чтобы позволить ему сказать вместо ошибки): пожалуйста введите только число от 1 до 100, если вы введете что-то еще, а затем число от 1 до 100. И если вы ввели неправильный номер, он должен «перезагрузить», и если это хороший номер, он должен закончиться.

я попытался петлю:

(I = в возрасте от сканера)

while(i>100 || i>0) 
     { 
      if (a < 100 || a > 0) { 

       System.out.println("please only enter a number between 1 and 100"); 
       System.out.println("how old are you?"); 
       Scanner s = new Scanner(System.in); 
       int a = s.nextInt(); 

     { 
System.out.println("you are " + a + "years old") 
    }}}}} 

, но в самом начале 'тогда' не могу достичь переменной. существует ли какой-либо другой способ?

Спасибо за помощь и извините за мой плохой английский :)

Спасибо @TheLostMind за помощь теперь я получил этот код:

, но я не понимаю, как использовать, если (> 0 & & < 100, и спички не работают

public static void main(String[] args) { 
    System.out.println("how old are you?"); 

    Scanner h = new Scanner(System.in); 
    String a= h.nextLine(); 

    String str = a; 

    String matches=("\\d+"); 

    Integer.parseInt(a); 



    { 
do { 


    System.out.println("please only enter a number between 1 and 100"); 
    System.out.println("how old are you?"); 
    h.nextLine(); 

} while(a>0 && a<100); } 
} 
} 
+0

Определите свой сканер вне цикла while –

+3

Декаль как «Сканер», так и 'int a' вне цикла. – TheLostMind

+0

Ваша проблема возникает из-за того, что вы читаете целое число со сканера и вводите не числовое значение. Мое предложение будет состоять в том, чтобы использовать строку, а затем проверить, является ли это допустимым числом или чем-то еще сообщать об ошибке или продолжить дальше, а небольшой комментарий стороны, 'i> 100 || i> 0' можно переписать как 'x> 0', – user902383

ответ

1

First of all, start by decalring both Scanner and int a outside the loop.

Next, use scanner#nextLine() to read an entire line of input into a String.

Then use String#matches("\\d+") and Integer.parseInt(inputString) to parse the int as a number.

Then use if(>0 && <100) check.

Есть методы в Scanner класс (hasNextInt()), которые ждут int, но это не то, что вы ищете.

1

Вам нужно сделать что-то вроде этого:

Declare Scanner and other Variable 

do { 
    System.out.println("please only enter a number between 1 and 100"); 
    System.out.println("how old are you?"); 

    read variable value from Scanner 
} while(check your condition on variable); 

Надеется, что это помогает.

1

Вопросы в System.out.print и сканере должны быть вне цикла. Проверьте цикл while, он говорит> 100 вместо < 100.

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