2012-10-27 13 views
13

Ich möchte Eingang in die von stdin bekommen vonbekommen Eingabe von stdin

3 
10 20 30 

die erste Zahl ist die Menge der Zahlen in der zweiten Zeile. Hier ist, was ich habe, aber es ist in der While-Schleife fest ... so glaube ich. Ich lief im Debug-Modus und das Array bekommt keine Werte zuweisen ...

Antwort

10

Es hat mit der Bedingung zu tun.

in.hasNextInt() 

Es lässt Sie halten Looping und dann nach drei Iterationen ‚i‘ Wert auf 4 und Testfälle gleich [4] wirft ArrayIndexOutOfBoundException.

Die Lösung, dies zu tun könnte

for (int i = 0; i < testNum; i++) { 
*//do something* 
} 
+0

danke .. aus irgendeinem Grund funktioniert es mit der for-Schleife; aber es funktioniert nicht mit der While-Schleife .. auch nach dem Hinzufügen der Bedingung – miatech

3

Aktualisieren Sie während sein nur die gewünschten Zahlen zu lesen, wie unten:

 while(i < testNum && in.hasNextInt()) { 

Die zusätzliche Bedingung && i < testNum in while hinzugefügt stoppt die Zahlen zu lesen, sobald Ihr habe die Zahlen gelesen, die äquivalent zu deiner Array-Größe sind, sonst wird es unbestimmt gehen und du wirst ArrayIndexOutOfBoundException bekommen, wenn das Nummern-Array testCases voll ist, dh du hast das Lesen mitabgeschlossenZahlen.

+1

, warum es funktioniert mit der for-Schleife, aber ich habe versucht, Ihre Methode, und es hat nicht funktioniert, das Merkwürdige ist, dass es sollte wie ich aktualisieren die 'i' Variable mit jeder Iteration – miatech

+0

gibt es etwas mit hasNextInt() -Methode, die Schleifen oder warten auf nächste int ... – miatech

+1

@miatech Es war dumm. Wir müssen 'i als erste Bedingung und' in.hasNextInt() 'als zweite Bedingung setzen. Ich habe die Antwort aktualisiert und es funktioniert perfekt. Früher wartete 'in.hasNextInt()' auf eine weitere Eingabe, bevor die Bedingung ausgewertet wurde. Bitte versuchen Sie es mich wissen zu lassen. –