2016-06-25 5 views
-1

Wenn ich den Code ausführe, kann ich den Scanner nicht eingeben und den Code so weiterführen, wie ich möchte. Kann mir jemand einen Rat geben? Ich habe den java.util.Scanner erfolgreich importiert. Übrigens, ich rufe die Methode im ursprünglichen Programm auf, ich habe es einfach entfernt, bevor ich die Frage gepostet habe. Ich benutze BlueJ.Wenn ich diesen Code ausführe, erlaube ich mir keine Eingabe in meinen Scanner. Benutze ich den Scanner richtig?

public class Instructions extends ConsoleProgram 
{ 
public boolean question(String prompt) { 
    Scanner s = new Scanner(System.in); 
    println(prompt); 
    String str = s.next(); 
    boolean result = true; 
    while(!(str.equals("yes") || str.equals("no"))) { 
     str = s.next(); 
     println("enter yes or no"); 
     } 
    if (str.equals("yes")) { 
    result = true; 
    } else if (str.equals("no")) { 
    result = false; 
    } 
    return result; 
} 
+0

Dieser Code würde kein Problem mit der Benutzerkonsole erzeugen. Bitte geben Sie eine [mcve] an, sagen Sie uns, ob es eine Ausnahme gibt und wie Sie Ihren Code ausführen (welches IDE/Tool). – Tom

+0

Sie wissen, dass Sie das Terminalfenster anzeigen (und verwenden) müssen (Strg + t)? – Tom

+0

Aktualisieren Sie Ihre Frage basierend auf der Antwort von @ Stephen C und nichts anderes sagen (ob die Antwort das Problem gelöst oder nicht) ist sehr schlechte Manieren. – Alex

Antwort

1

Bin ich den Scanner richtig mit?

Das ist nicht das Problem. Das eigentliche Problem ist ein einfacher Fehler in Ihrer Anwendungslogik. Diese Bedingung:

!(str.equals("yes") && str.equals("no")) 

kann nie false sein. Eine Zeichenkette kann nicht gleichzeitig "yes" AND gleich "no"gleichzeitig sein. Daher kann Ihre while Schleife nicht beendet werden.


UPDATE

Bearbeitungs Folgen, Code sollte mehr oder weniger Arbeit. Aber das ist nicht ganz richtig.

while(!(str.equals("yes") || str.equals("no"))) { 
    str = s.next(); 
    println("enter yes or no"); 
} 

1) Sie lesen das nächste Eingabezeichen, BEVOR Sie dazu auffordern.

2) Sie verbrauchen die verbleibenden Zeichen nicht nach dem ersten Token der Zeile, die der Benutzer gerade eingegeben hat.

Das ist besser

while(!(str.equals("yes") || str.equals("no"))) { 
    s.nextLine(); 
    println("enter yes or no"); 
    str = s.next(); 
} 

Ich schlage vor, Sie gehen zurück und die javadocs für die Scanner Klasse lesen sorgfältig.

Es ist auch möglich, dass new Scanner(System.in) falsch ist. Das ist normalerweise das Richtige, aber Ihre Anforderungen könnten erfordern, dass Sie die Eingabe von einem anderen Eingabestream lesen.

+0

Okay, es gab einen Fehler, aber ich konnte diesen Fehler nicht testen, weil der Scanner es mir nicht erlaubte, Folgendes einzugeben :( – DSATH

+2

@DSATH Sie haben die '&&' in geändert deine ursprüngliche Frage.Gibt es noch ein Problem? Wenn ja, bitte erläutern Sie, was es ist. Ab sofort, seit Sie den Post bearbeitet haben, aber nichts mehr darüber gesagt haben, können wir nicht sagen, was vor sich geht. Wenn das Update Stephen vorgeschlagen hat, alles funktioniert, dann bearbeiten Sie Ihre Frage nicht so. – ajb

+0

@ajb Ich habe es geändert. Es war ein Fehler im Code, den ich nicht überprüfen konnte, weil ich den Code nicht initiieren konnte. Die Scannerklasse erlaubt mir nicht, eine Eingabe zu geben, um die Sequenz im Code zu starten, ist das Problem. – DSATH