Frage

Was ich tun möchte, ist, den Benutzer um eine Reihe von Zeichenfolgen zu bitten, in ein Array zu lesen, und dann den Benutzer zu bitten, diese Anzahl von Zeichenfolgen einzugeben und sie in das Array zu lesen. Wenn ich diesen Code ausführe, fragt mich nie nach einem Eingang den ersten Zyklus der ersten For-Loop, sondern druckt einfach "String #0: Zeichenfolge #1:" und dann kann ich Text eingeben. Warum ist das und was habe ich falsch gemacht?

import java.util.Scanner;

public class ovn9 
{
public static void main(String[] args)
{
    Scanner sc=new Scanner(System.in);

    System.out.print("Number of inputs: ");

    int lines= sc.nextInt();
    String[] text=new String[lines];

    for(int x=0; x<text.length; x++)
    {
        System.out.print("String #"+x+": ");
        text[x] = sc.nextLine();
    }

    for(int y=0; y<text.length; y++)
        System.out.println(text[y]);

}
}
War es hilfreich?

Lösung

Pufferung.

nextInt() Konsumiert die Newline nicht in dem Eingangspuffer, der dort eingelegt wurde, wenn Sie die Anzahl der Eingänge eingegeben haben. In der Iteration 0 der für Schleife gibt es bereits eine Eingabezeile im Puffer und nextLine() kann sofort abgeschlossen werden und das Programm wartet nur in Iteration 1 auf eine neue Eingangslinie. Um die Neue Zeile in der Eingabe zu ignorieren, können Sie nur einen anderen hinzufügen nextLine() Rufen Sie an, bevor Sie die for -Schleife eingeben.

Andere Tipps

Vielleicht sollten Sie Ihre Schleife ändern, um "sc.next ()" zu verwenden.

for ( int x = 0; x < lines; x++ ) {
    System.out.print("String #" + x + ": ");
    text[x] = sc.next();
}

Es kann durch die Java -API erklärt werden

String Next (): Findet und gibt das nächste komplette Token aus diesem Scanner zurück.

String Nextline (): Fortschreitet diesen Scanner die aktuelle Zeile und gibt die Eingabe zurück, die übersprungen wurde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top