Ich habe eine Klasse entwickelt, um die Grundlagen eines Stapels in Web-Browser-URLs zu implementieren. Das beabsichtigte Verhalten ist wie folgt Wenn der Benutzer eine URL in die Adressleiste eingibt, wird der Vorwärtsstapel gelöscht. Wenn der Benutzer auf die Schaltfläche Zurück klickt, wird die aktuelle URL (in der Adressleiste) auf den Vorwärtsstapel geschoben. Der Backstack wird geöffnet und die Popup-URL wird in der Adressleiste platziert. Wenn der hintere Stapel leer ist, passiert nichts. Wenn der Benutzer auf die Schaltfläche Weiter klickt, wird die aktuelle URL (in der Adressleiste) auf den Backstack geschoben. Der Vorwärtsstapel wird geöffnet, und die Popup-URL wird in der Adressleiste platziert. Wenn der Rückwärtstapel leer ist, passiert nichts.Korrekte Implementierung des Stack-Verhaltens
Im Grunde läuft mir ein Problem mit dem Umgang mit dem Backstack. Jedes Mal, wenn der Backstack-Block aufgerufen wird, wird die aktuelle URL in den Vorwärtsstapel geschoben. Während dieses Verhalten für einen Push des Backstacks korrekt ist, ist es für den Fall, dass sich der Backstack nicht mehr zurückbewegt, nicht beabsichtigt (Beispiel: Google.com [Backstack-Aufruf] Google.com schiebt Google.com zweimal zum Forward-Stack) .
Ich habe Probleme mit der Logik, dies nicht zuzulassen. Es ist eindeutig ein inkorrektes Verhalten, den Vorwärtsstapel mehrmals zu schieben, um nur eine Webseite nach oben zu bewegen.
Irgendwelche Vorschläge, während ich den Kern meines Codes intakt halte?
public class BrowserStack {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
// the current URL
String url = null;
Stack<String> forward = new Stack<String>();
Stack<String> back = new Stack<String>();
String input;
System.out.println("Type a combination of URLs, or the > or < symbol.\nType 'q' to quit.");
while (true) {
input = s.next();
if (input.equals("q")) {
System.out.println("Bye");
return;
}
if (input.equals("<")) {
try {
forward.push(url); //unintended behavior happens here
url = back.pop();
} catch (EmptyStackException e) {
}
}
else if (input.equals(">")) {
try {
back.push(url);
url = forward.pop();
} catch (EmptyStackException e) {
}
}
else {
if (url != null)
back.push(url);
url = input;
forward.clear();
}
System.out.println("Current webpage [" + url + "]");
}
}
}
wo bevölkern Sie 'url'? – Helios
@Helios in der 'else' Anweisung unten,' url = input' – 23k
Durch "der hintere Stapel bewegt sich nicht mehr zurück" meinst du es ist leer (oder hat nur 1 Element)? Und wäre es nicht besser, empty() explizit zu prüfen, anstatt EmptyStackException zu behandeln? –