Пока не состояние - PullRequest
       32

Пока не состояние

3 голосов
/ 09 февраля 2012

Как я могу сказать следующее:

while(input is not an int){
do this
}

Я пробовал этот код, но я знаю, что он неправильный:

 int identificationnumber;
 Scanner sc3 = new Scanner(System.in);
identificationnumber = sc3.nextInt();

while( identificationnumber != int){ // this line is wrong 

Scanner sc4 = new Scanner(System.in);
identificationnumber = sc4.nextInt();

}

Любые предложения, пожалуйста. Спасибо.

Ответы [ 7 ]

6 голосов
/ 09 февраля 2012

попробуй:

while (! scanner.hasNextInt()) { // while the next token is not an int...
    scanner.next();              // just skip it
}
int i = scanner.nextInt();       // then read the int
6 голосов
/ 09 февраля 2012

Javadocs - ваш друг: http://docs.oracle.com/javase/6/docs/api/java/util/Scanner.html

nextInt() выдает исключение, если следующий токен не является int. Вы, наверное, ищете hasNextInt()

Кроме того, почему вы создаете новый Scanner каждый раз, когда делаете цикл? (Или вообще - у вас уже есть один перед циклом)

1 голос
/ 09 февраля 2012

Вы хотите это?

String identificationnumber;
Scanner scanner = new Scanner(System.in);//Only one Scanner is needed

while (scanner.hasNext()) { // Is there has next input?
    identificationnumber = scanner.next();//Get next input
    try {
        Integer.parseInt(identificationnumber);//Try to parse to integer
        System.out.println(identificationnumber + " is a number!");
    } catch (NumberFormatException e) {
        System.out.println(identificationnumber + " is not a number!");
    }
}
1 голос
/ 09 февраля 2012

Сканер выдает исключение, прежде чем попасть в эту строку http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html#nextInt()

Будет работать следующий код:

    int i = 0;
    while(true){
        Scanner scan = new Scanner(System.in);
        try{
            i = scan.nextInt();
        }catch (Exception e) {
            break;
        }
    }
0 голосов
/ 09 февраля 2012

Вы должны сделать это:

if (sc3.hasNextInt())

Проверьте это: Как использовать Scanner для приема только действительного значения int в качестве ввода

Что касается класса /Сравнение типов, прочитайте это: В чем разница между instanceof и Class.isAssignableFrom (...)?

0 голосов
/ 09 февраля 2012

Использовать nextInt () метод класса сканера.

бросает,

InputMismatchException - если следующий токен не соответствует Целочисленное регулярное выражение или выходит за пределы диапазона

0 голосов
/ 09 февраля 2012

При написании sc3.nextInt () я предполагаю, что вы всегда возвращаете int, поэтому проверка на отсутствие int кажется немного странной.

Может быть, лучше вернуть строку с номером внутри. Если строка пустая, остановите (вы можете просто проверить ""), а в противном случае преобразовать ее в целое число.

...