2016-07-07 9 views
0

Die Schleife, die ich versuche zu starten wird initialisiert, wird aber nicht weiter nach der ersten Schleife ausgeführt werden. Da ich weiß, wo das Problem ich den größten Teil des Codes, um die Schleife zu beheben. Nach der zweiten Auswahl wird die Schleife nicht ausgeführt. Danke für jede Hilfe.While-Schleife Initialisierung, aber nicht Java-Schleife

public static void main(String[] args) 
{ 
    String number; // enter number   
    int stringLength = 0;  
    String selection = "y" ; 
    // Create a Scanner object to read input. 
    Scanner keyboard = new Scanner(System.in); 

// PrintWriter outputFile = new PrintWriter("outDataFile.txt"); 
// outputFile.close(); 

    while (selection == "y") 
    { 

    // Get the user's number. 
    System.out.print("Write your number "); 
    number = keyboard.nextLine(); 


    System.out.print("y/Y to continue, any else to exit"); 
    selection = keyboard.nextLine(); 


    } 

} 
+0

Die Verwendung von '==' zum Vergleichen von Strings führt nicht zu dem, was Sie in Java erwarten. Siehe [Wie kann ich Zeichenfolgen in Java vergleichen?] (Http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java). – Jesper

Antwort

1

Sie equals statt == for Strings als == verwenden sollten, vergleicht nur die Referenzen nicht die Daten innerhalb der Objekte, so:

while (selection.equalsIgnoreCase("y")) 

Fall ignorieren, weil Sie "y/Y to continue, any else to exit" in Ihrer Nachricht haben.

+0

und besser 'equalsIgnoreCase()' – NwDev

+0

@NwDx rechts, hinzugefügt –

2

Ändern Sie bitte Ihre Bedingung:

while ("y".equalsIgnoreCase(selection.trim())) 

Es ist besser String mit Gleichen zu vergleichen, so dass Sie das eigentliche Wort zu vergleichen, anstatt er Identität widersprechen. Die Trimmung wird einen leeren Raum, der durch Fehler hinzugefügt löscht

Auch ist es besser, mit den konstanten "y" auf der linken Seite vergleichen NullPointerException

auch zu vermeiden, wie in der anderen Antwort erklärt, die equalsIgnoreCase() wichtig ist zu .

+1

Scanner.nextLine() sollte nie Null zurückgeben, aber Sie haben Recht, dass man mit Konstante vergleichen sollte, ist der bessere Ansatz. – NwDev

Verwandte Themen