Пока не условие

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

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();

}

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


person MosesA    schedule 09.02.2012    source источник
comment
Итак, вы получили int и хотите проверить, не является ли он таковым? Что еще должно быть тогда?   -  person guitarflow    schedule 09.02.2012
comment
stackoverflow.com/questions/2674554 /   -  person AJP    schedule 09.02.2012


Ответы (7)


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

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

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

person Brian Roach    schedule 09.02.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
person Olivier Croisier    schedule 09.02.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;
        }
    }
person Alin Stoian    schedule 09.02.2012
comment
Спасибо за ссылку - очень полезно. - person MosesA; 09.02.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!");
    }
}
person plucury    schedule 09.02.2012
comment
Спасибо за это, но это просто оставляет меня в бесконечном цикле. Есть ли способ сделать это с помощью цикла for? - person MosesA; 09.02.2012
comment
@ayokunleadeosun Если вы хотите разорвать цикл, вы можете определить строку флага конца или просто использовать Ctrl + c - person plucury; 09.02.2012

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

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

person Michel Keijzers    schedule 09.02.2012
comment
Я использовал sc3.nextInt, чтобы получить ввод в переменную int. - person MosesA; 09.02.2012
comment
метод hasNextInt действительно является лучшим решением. - person Michel Keijzers; 09.02.2012

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

Это бросает,

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

person RanRag    schedule 09.02.2012

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

if (sc3.hasNextInt())

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

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

person caleb    schedule 09.02.2012