2017-04-25 1 views
-2

Ich scheinen meine Scanner/Eclipse automatisch ausgeführt Benutzereingaben zu haben. Ich habe einen Scanner initialisiert als:Java-Scanner mit alten Eingabe

Scanner in = new Scanner(System.in); 

mit einem Menü wie:

@Override 
void update() { 
    //welcome 
    System.out.println("-----Welcome to the Pet Game-----"); 
    System.out.println(); 
    System.out.println("1. Play"); 
    System.out.println("2. Help"); 
    System.out.println("3. Dev Mode"); 
    int choice = in.nextInt(); 
    switch(choice){ 
    case 1: 
     playLoop(); 
     break; 
    case 2: 
     helpPage(); 
     break; 
    case 3: 
     devMode(); 
     break; 
    } 

} 

Aus irgendeinem Grund es automatisch 2 in diesem Menü eingibt. Und folgt mit 3 in diesem Menü:

// main menu 
     System.out.println("This is Day " + (i+1) + " you have " + dayActions + " Actions left."); 
     System.out.println("1. View Pet Status"); 
     System.out.println("2. Shop"); 
     System.out.println("3. Skip Action"); 
     System.out.println("4. Play"); 
     System.out.println("5. Feed"); 
     System.out.println("6. Bathroom"); 
     System.out.println("7. Sleep"); 

     int choice = in.nextInt(); 
     System.out.println(); 

Ich denke, das meine GameState Klasse zurückzuführen sein könnte, aber ich bin nicht sicher. Gamestate Klasse:

abstract class GameState { 

    abstract void update(); 

    protected void pushState(GameState state) { 
     PetGame.pushState(state); 
    } 

    protected void popState() { 
     PetGame.popState(); 
    } 
} 

StoreState (Dies ist die Klasse, es zu springen Ich kann nicht einen Hinweis auf sie in meinem Code finden keine Ahnung, warum es hier geht..)

public class StoreState{ 

    @Override 
    void update() { 
     // TODO Auto-generated method stub 

    } 


} 

Danke für Ihre Hilfe.

+0

bitte ** nicht ** aktualisieren Sie Ihre Frage, da Ihre Probleme gelöst werden. Das ändert den Kontext des ursprünglichen Problems völlig. Sie tun niemandem einen Gefallen, indem Sie das tun. Bringen Sie stattdessen einen Bearbeitungsbereich unterhalb Ihres ursprünglichen Problems an, der das neue Problem angibt, vor dem Sie stehen. –

+0

@OusmaneMahyDiaw Ihre Absicht ist im Allgemeinen korrekt, aber * "fügen Sie lieber einen Bearbeitungsabschnitt unterhalb Ihres ursprünglichen Problems hinzu, der das neue Problem angibt, dem Sie gegenüberstehen" * ist falsch. Ein neues Thema muss in einem neuen Beitrag/einer neuen Frage gestellt werden (dies wurde mehrfach in Meta abgefragt und diskutiert, zum Beispiel hier: https://meta.stackoverflow.com/questions/298948/question-answered-buta-a- new-issue-erschien) – Tom

+0

@Tom danke, immer noch das System lernen Sie sehen ^^. Geschätzt. –

Antwort

-1

Sie benötigen, um die break Anweisung zu verwenden, aus der switch Anweisung nach einer bestimmten case wurde erfüllt, sonst zu springen, Sie etwas bekommen ein fallthrough genannt.

case 1: 
    playLoop(); 
    break; 
case 2: 
    helpPage(); 
    break; 
case 3: 
    devMode(); 
    break; 
+0

Erstens: Diese Frage ist eine Täuschung, also antworte nicht (markiere sie stattdessen). Und zweitens: eine Pause direkt nach dem "Fall" und vor dem eigentlichen Methodenaufruf? – Tom

+0

Ich nenne es: poste keine schlechten Antworten. – Tom

+0

Ich habe sie hinzugefügt, aber es scheint immer noch zu stoppen wegen möglicherweise StoreState? –