2017-05-02 2 views
0
public static void main(String[] args) throws IOException { 
    Scanner scan = new Scanner(System.in); 
    int i=0; 
    int arr[] = new int[10]; 
    while(scan.hasNext()){ 
     arr[i++] = scan.nextInt(); 
     System.out.println("sud"); 
    } 
    System.out.println("hello"); 
} 

} 

Wenn der Eingang 1 2 3 4 5 dann ausdrucken 5 mal. sud bedeutet while-Schleife funktioniert, aber es geht nicht auf die System.out.println("hello"); Zeile oder darüber hinaus.Ausführungsablauf nach while-Schleife Java

+2

vielleicht weil: scan.hasNext() :) –

+0

Ich denke 'if (i> = arr.length) break;'. Fügen Sie dies als _first_ Anweisung innerhalb der while-Schleife ein. –

+0

Nachdem Sie eingegeben haben 1,2,3,4,5 eingeben - Sie sehen "Sud" 5 mal danach drücken Sie Strg + Z, wenn Sie auf Windows sonst wahrscheinlich Strg + D unter Linux sind. – SomeDude

Antwort

1

Da Sie die Daten von System.in lesen, wartet hasNext() darauf, dass Sie mehr Daten eingeben, wenn Sie im Konsolenmodus arbeiten.

Um zu sagen, Scanner, dass es keine Eingabe mehr gibt, müssen Sie den Eingabestream schließen. Unter Windows lautet die Nummer Ctrl + Z gefolgt von Geben Sie ein. Unter UNIX ist es Ctrl + D.

Ihr Code wird auch funktionieren, wenn Sie die Eingabe in eine Datei eingeben und Ihr Programm umleiten, um aus einer Datei zu lesen.

Hinweis: Sie müssen Ihren Code vor einem Benutzer schützen, der zu viele Daten eingibt. Fügen Sie i < arr.length zu der Schleifenbedingung hinzu, andernfalls wird Ihr Code mit einer Ausnahme beendet, wenn Endbenutzer die 11. Nummer eingeben.

while(i < arr.length && scan.hasNext()) { 
    ... 
} 
+0

Danke, es funktioniert .Kannst du mir sagen, wie unbekannte Anzahl von Eingaben ohne dieses Problem zu nehmen. – SudSwastik

+0

@SudSwastik Wenn Sie die Anzahl der Elemente nicht im Voraus begrenzen möchten, verwenden Sie einen Container, der erweitert werden kann, wenn Sie ihm Elemente hinzufügen, z. B. "Liste list = new ArrayList <>()". Sie können 'list.add (scan.nextInt())' darauf in einer Schleife aufrufen und dann die Eingabe mit Strg + Z/Strg + D beenden, und die Liste enthält alle Einträge, die der Benutzer eingegeben hat. – dasblinkenlight

0

Vielleicht fügen Sie eine if-Anweisung für einen bestimmten Eingang zu überprüfen Eingang zu nehmen zu stoppen (brechen die Schleife)

while(scan.hasNext()){ 
    String tmp = scan.next(); 
    if (tmp.equals("exit"))  
     break; 
    else { 
    arr[i++] = Integer.parseInt(tmp); 
    System.out.println("sud"); 
    } 
} 
System.out.println("hello"); 

INPUT:

1 2 3 exit 

OUTPUT:

sud 
sud 
sud 
hello 
+0

dies könnte 'IndexOutOfBoundsException' werfen. –

+0

@OusmaneMahyDiaw Das liegt daran, dass das Array bereits mit der Größe 10 initialisiert wurde, vorausgesetzt, dass die Eingabe nicht mehr als 10 beträgt. –