Helfen Sie mit, brechen aus, wenn/Neubauten?
Schreibe ich ein Protokoll-Klasse umfasst eine Vielzahl von wenn/Neubauten..hier ist die Klasse:
public class Protocol {
Scanner scan = new Scanner(System.in);
private static final int WAITING = 0;
private static final int SENTREQUEST = 1;
private static final int SENTITEMS = 2;
private static final int ANOTHER = 3;
private static final int CHOICE = 4;
private int choice;
private int state = WAITING;
public String processInput(String theInput) {
String theOutput = null;
if (state == WAITING) {
theOutput = "Do you accept the terms of agreement? Y/N?";
state = SENTREQUEST;
} else if (state == SENTREQUEST) {
if (theInput.equalsIgnoreCase("y")) {
theOutput = ": 1. program file 2. pictures 3. documentation";
state = CHOICE;
} else {
theOutput = "Invalid Input!";
state = SENTITEMS;
}
}
else if (state == CHOICE) {
choice = scan.nextInt();
switch(choice) {
case 1: theOutput = "show something";
break;
case 2: theOutput = "show something";
break;
case 3: theOutput = "show something";
break;
}
}
else if (state == SENTITEMS) {
theOutput = "Want another? (y/n)";
state = ANOTHER;
} else if (state == ANOTHER) {
theOutput = "Do you accept the terms of agreement? Y/N?";
if (theInput.equalsIgnoreCase("y")) {
theOutput ="test";
state = SENTREQUEST;
} else {
theOutput = "Bye.";
state = WAITING;
}
}
return theOutput;
}
}
Geht es nicht um den Schalter Fall, und ich bin sicher, es ist eine Frage der Ausbruch aus dem wenn/elses Klauseln korrekt, aber ich kann nicht finden, das Problem.
- Sie haben nicht aufgezeigt, wie diese aufgerufen wird. Der erste Aufruf der Funktion immer nur den Status auf SENT_REQUEST und dann wieder, zum Beispiel. Es ist auch nicht klar, warum man nicht Umschalten auf den Zustand in den ersten Platz (oder in der Tat mit einem enum).
- haben Sie setzen einen Haltepunkt in der debug it? Das ist, wo ich anfangen würde, normal.
- Es könnte nützlich sein, zu verstehen, dass Scannen.nextInt() versucht nur mit dem Lesen des nächsten Tokens als int, so müssen Sie sicherstellen, dass das nächste token ist eigentlich ein int erste
- Als mit dem Kommentar von chimoo, ich bin neugierig, warum Sie einen scan haben.nextInt() in der Erwägung, dass der restliche code wird verwendet "theInput". Sind Sie "aus versehen "Essen" Ihre Zahl in theInput und hängen an den Aufruf von nextInt? Einige Beispiel-Ausgabe eines Programms kann helfen, zu verstehen, was passiert ist.
- Jessup Du hast vollkommen Recht, ich caste theInput in eine ganze Zahl und es funktioniert jetzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lösen ein ähnliches problem, sobald ich implementiert die Strategie-Muster als enum. Für jede Strategie, erstellen Sie einen neuen Wert für den enum, incapsulating den code in eine enum-Methode:
Können Sie anwenden der gewählten Strategie abhängig vom enum-Wert, den Sie haben, tatsächlich entfernen Sie die Kette von if - /else-Anweisungen:
Dies ist eine Lösung, die ich angewendet, für ein problem von mir, vielleicht ist es nicht der optimale oder mehr Objekt-orientierten ein. Sie haben zu wählen die richtige Lösung für Ihr problem, aber ich hoffe, dass meine Erfahrung helfen können.
Verwenden State-Muster wie dieses: