Докато не е състояние

Как мога да кажа следното:

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

Звучи сякаш низът на заявката липсва? Опитвам:

RewriteRule ^pqr/(.*) http://www.mysite.com/someotherword/$1 [QSA,L]

Алтернативи на POST данни

Вместо това използвайте GET.

Използвайте условие за пренаписване, за да не пренасочвате файлове с POST данни, съхранявайте данните в базата данни, след това извикайте файл за пренасочване, когато файлът се отвори на новия сървър, заредете публикуваните данни от базата данни.

- 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 Ако искате да прекъснете цикъла, можете да дефинирате краен низ с флаг или просто да използвате control + c - person plucury; 09.02.2012

С писането на sc3.nextInt() предполагам, че винаги получавате обратно int, така че проверката за non 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())

Вижте това: Как да използвате Scanner за приемане валидно само int като вход

По отношение на сравнението клас/тип, прочетете това: Какво е разлика между instanceof и Class.isAssignableFrom(...)?

person caleb    schedule 09.02.2012