2017-02-15 7 views
3

Ich muss codieren, um zwei verschiedene Fehlermeldungen für verschiedene Ausgaben zurückzugeben. eine für dann die Benutzereingabe ist leer und eine andere, wenn die Benutzereingabe nicht y oder n ist. Ich laufe auf das Problem meines Codes ein, der nur die Fehlermeldung für das nicht y oder n zurückgibt, weil ich diese Nachricht zurückgeben muss, wenn der Benutzer irgendetwas anders als y oder n eingibt. Der Code wird die richtige Fehlermeldung für den leeren Fehler einmal zurückgeben, aber danach wird nur die Fehlermeldung für die nicht y oder n zurückgegeben. irgendwelche Vorschläge, wie man das behebt?Ist meine Schleife korrekt in Java eingerichtet?

while (choice.isEmpty()) 
{ 
    System.out.println("Error! This entery is required. Try again."); 
    choice = sc.nextLine(); 
} 

while (!(choice.equalsIgnoreCase ("y") || choice.equalsIgnoreCase ("n"))) 
{ 
    System.out.println ("Error! Please enter y, Y, n, or N. Try again "); 
    choice = sc.nextLine(); 
} 

Antwort

3

Du bist wahrscheinlich mit einer Schleife besser dran:

while (!choice.equalsIgnoreCase("y") && !choice.equalsIgnoreCase("n")) { 
    if (choice.isEmpty()) { 
     System.out.println("Error! This entry is required. Try again."); 
    } else { 
     System.out.println("Error! Please enter y, Y, n, or N. Try again."); 
    } 

    choice = sc.nextLine(); 
} 
+0

@TimBiegeleisen Richtig, aber da der ursprüngliche Aufruf nicht in dem von OP bereitgestellten Snippet war, habe ich das nicht berücksichtigt. Wenn ich das selbst schreiben würde, wäre ich Ihrer Version näher. Ich habe das meiner Antwort nicht hinzugefügt, da ich mich nicht mit dir überschneiden wollte. –

1

Ich glaube, Sie nur eine einzige Schleife brauchen hier:

String choice = ""; 
do { 
    choice = sc.nextLine(); 
    if (choice.equalsIgnoreCase("y") || choice.equalsIgnoreCase("n")) { 
     break; 
    } 
    else { 
     System.out.println ("Error! Please enter y, Y, n, or N. Try again "); 
    } 
} while (true); 

Beachten Sie, dass dieser Ansatz richtig alle Eingaben behandelt, einschließlich des ersten, wenn der Eingang noch nicht vorher definiert wurde.

+1

@ScaryWombat 'NOT (p OR q)' ist logisch äquivalent zu 'NOT p AND NOT q', was die Version ist, die in Robbys Antwort verwendet wird. –

+0

Diese Version ist viel einfacher für mein Gehirn. –

0

Du hast nicht beschreiben, was Sie erreichen wollen, wenn es sich um eine Endlosschleife ist (solange sc.nextLine() kehrt etwas), wo die Benutzer nur eingeben ‚y‘ oder ‚n‘:

while((choice = sc.nextLine()) != null) { 
    if(choice.isEmpty()) { 
     System.out.println("Error! This entry is required. Try again."); 
    } else if(!choice.equalsIgnoreCase("y") && !choice.equalsIgnoreCase("n")) { 
     System.out.println("Error! Please enter y, Y, n, or N. Try again."); 
    } else { 
     // do whatever you need 
    } 
} 
+0

'while (choice = sc.nextLine()) {' entspricht nicht einem booleschen –

+0

'// mach, was du brauchst' plus' break; '? –

+0

Hoppla, habe den Check gegen 'null' vergessen. Das OP hat die Art der 'sc'-Variable nicht offengelegt, also nahm ich an, dass 'sc.nextLine()' sich auf einen Scanner bezieht, der' null 'zurückgibt, wenn keine Zeilen mehr vorhanden sind, wodurch die Schleife unterbrochen wird. Was das Hinzufügen eines "Break" betrifft, nahm ich an, dass er eine Endlosschleife haben möchte. – zwer

Verwandte Themen