2016-05-21 3 views
0

Ich bin kein Java-Experte und ich habe ein Problem. Ich erhalte Daten von der Tastatur mit Scanner, aber ich muss zwei Validierungen durchführen, bevor ich die Daten in meinem Array registriere. Einer ist, dass die Daten keine Zeichenfolge sein müssen, und ich verwende !in.hastNextInt(), um die Scanner-Instanz zu validieren, und die andere ist, dass die Daten nicht 0 sein müssen. und der Code verwende ich die nächste:Java: nextInt() Validierung funktioniert nicht Eigenschaft

Scanner in = new Scanner(System.in); 
    int chain [] = new int [10]; 

    System.out.println("Welcome, please enter the values for the array: "); 
    for(int x = 0;x < chain.length; x++) { 
     System.out.print((x+1) +": "); 
     while(!in.hasNextInt() || in.nextInt()==0) { 
      System.out.print("This app doesn't accept letters, symbols or zeros: "); 
      in.next(); 
     } 
     chain[x] = in.nextInt(); 
    } 

und leider, wenn ich das Programm ausführen es fragt mich zweimal pro jede Aussage zum Beispiel fragt mich zweimal pro Position 0 des Arrays und zweimal pro Position 1 des Arrays.

Hat jemand eine Idee von dem, was passiert? Es arbeitet perfekt mit !in.hasNextInt() aber wenn im in.nextInt()==0 Verwendung gibt mir das Problem, oder wenn ich in.nextInt()==0 allein

nur verwenden, was mein Fehler ist und was tun Sie mir empfehlen in meinem Code zu ändern, um es gut zu arbeiten. Ich schätze jede Hilfe

Vielen Dank im Voraus

als @Andreas in seiner Antwort sagte ich ist musste meinen Code und die neuen guten ändern:

for(int x = 0;x < chain; x++) { 
    System.out.print((x+1) +": "); 
    while(!in.hasNextInt()) { 
     System.out.print("This app doesn't accept letters or symbols: "); 
     in.next(); 
    } 
    chain[x] = in.nextInt(); 
    if(chain[x] == 0) { 
     System.out.println("This app doesn't accept 0"); 
     --x; 
    } 
} 

Antwort

1

nextInt()verbraucht das Token, also wenn Sie in.nextInt()==0 tun, lesen Sie ein Token und eine Schleife, wenn der Wert Null ist.

Wenn das Token nicht Null ist, wird die Schleife beendet und Sie führen chain[x] = in.nextInt() aus, das das nächste Token liest. Nicht wieder dasselbe.

Sie sollten den Wert in einer Variablen erfassen, dann auf Null prüfen und gegebenenfalls verwenden.

+0

Vielen Dank, jetzt habe ich eine Idee, aber in diesem Moment bin ich im öffentlichen Verkehr. Ich werde versuchen, was Sie in ein paar Stunden sagen und Ihnen sagen, ob es funktioniert. :) –

+0

Danke für Hilfe, ich habe meinen Code geändert und es funktioniert. Ich danke dir sehr. Sie können das neue als Antwort sehen –

Verwandte Themen