Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Herausforderung: Implementierung von Browserhistory | Fortgeschrittene Datenstrukturen in Java
Java Datenstrukturen

bookHerausforderung: Implementierung von Browserhistory

Aufgabe

Im vorherigen Kapitel wurde ein System mit zwei Schaltflächen, Vorwärts und Rückwärts, unter Verwendung der veralteten Stack-Datenstruktur implementiert, welche in der modernen Java-Entwicklung nicht empfohlen wird.

In diesem Kapitel besteht die Aufgabe darin, sich an die verwendete Logik zur Implementierung der Klasse BrowserHistory zu erinnern und diese mithilfe der Deque-Datenstruktur neu zu implementieren.

Versuche nicht im vorherigen Kapitel nachzuschlagen und diese Aufgabe eigenständig zu lösen – sozusagen "Code neu schreiben". Dies ist auch eine ausgezeichnete Übung mit GitHub, die von Vorteil für dich sein wird.

Im bereitgestellten Code auf GitHub (siehe Link unten) wurde ein Interface mit allen Methoden erstellt. Die Aufgabe besteht darin, eine Klassenimplementierung zu erstellen und dieses Interface zu implementieren, indem alle Methoden überschrieben werden.

Nach Abschluss sollten die von mir bereitgestellten Tests ausgeführt werden; damit wird die Lösung automatisch überprüft.

Es können auch Zwischentests in der main-Klasse durchgeführt werden. Insgesamt setze ich auf deine Ehrlichkeit und Eigenständigkeit. Ein wahrer Programmierer sollte in der Lage sein, Code eigenständig zu verstehen!

  • Zunächst drei Attribute in dieser Klasse anlegen: backStack, forwardStack und currentUrl.
  • Anschließend einen Konstruktor für diese Klasse automatisch generieren lassen.
  • Das Schlüsselwort implements verwenden und alle Methoden des BrowserHistory-Interfaces überschreiben.
  • In den Methoden die zuvor erlernten Methoden von Deque oder Stack verwenden. Beachte, dass Deque eine moderne und überlegene Alternative zur Stack-Datenstruktur darstellt.
package codefinity.Task;

import java.util.Deque;

public class BrowserHistoryImpl implements BrowserHistory {
    private Deque<String> backStack;
    private Deque<String> forwardStack;
    private String currentUrl;

    public BrowserHistoryImpl(Deque<String> backStack, Deque<String> forwardStack, String currentUrl) {
        this.backStack = backStack;
        this.forwardStack = forwardStack;
        this.currentUrl = currentUrl;
    }

    @Override
    public void visitPage(String url) {
        backStack.push(currentUrl);
        forwardStack.clear();
        currentUrl = url;
    }

    @Override
    public void goBack() {
        if (!backStack.isEmpty()) {
            forwardStack.push(currentUrl);
            currentUrl = backStack.pop();
        } else {
            System.out.println("Cannot go back. Already at the beginning.");
        }
    }

    @Override
    public void goForward() {
        if (!forwardStack.isEmpty()) {
            backStack.push(currentUrl);
            currentUrl = forwardStack.pop();
        } else {
            System.out.println("Cannot go forward. Already at the latest page.");
        }
    }

    @Override
    public String getCurrentPage() {
        return currentUrl;
    }
}
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 5

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Suggested prompts:

Can you explain how the Deque data structure improves upon the Stack in this context?

What are the main differences between Stack and Deque in Java?

Could you walk me through the logic of the visitPage, goBack, and goForward methods?

bookHerausforderung: Implementierung von Browserhistory

Swipe um das Menü anzuzeigen

Aufgabe

Im vorherigen Kapitel wurde ein System mit zwei Schaltflächen, Vorwärts und Rückwärts, unter Verwendung der veralteten Stack-Datenstruktur implementiert, welche in der modernen Java-Entwicklung nicht empfohlen wird.

In diesem Kapitel besteht die Aufgabe darin, sich an die verwendete Logik zur Implementierung der Klasse BrowserHistory zu erinnern und diese mithilfe der Deque-Datenstruktur neu zu implementieren.

Versuche nicht im vorherigen Kapitel nachzuschlagen und diese Aufgabe eigenständig zu lösen – sozusagen "Code neu schreiben". Dies ist auch eine ausgezeichnete Übung mit GitHub, die von Vorteil für dich sein wird.

Im bereitgestellten Code auf GitHub (siehe Link unten) wurde ein Interface mit allen Methoden erstellt. Die Aufgabe besteht darin, eine Klassenimplementierung zu erstellen und dieses Interface zu implementieren, indem alle Methoden überschrieben werden.

Nach Abschluss sollten die von mir bereitgestellten Tests ausgeführt werden; damit wird die Lösung automatisch überprüft.

Es können auch Zwischentests in der main-Klasse durchgeführt werden. Insgesamt setze ich auf deine Ehrlichkeit und Eigenständigkeit. Ein wahrer Programmierer sollte in der Lage sein, Code eigenständig zu verstehen!

  • Zunächst drei Attribute in dieser Klasse anlegen: backStack, forwardStack und currentUrl.
  • Anschließend einen Konstruktor für diese Klasse automatisch generieren lassen.
  • Das Schlüsselwort implements verwenden und alle Methoden des BrowserHistory-Interfaces überschreiben.
  • In den Methoden die zuvor erlernten Methoden von Deque oder Stack verwenden. Beachte, dass Deque eine moderne und überlegene Alternative zur Stack-Datenstruktur darstellt.
package codefinity.Task;

import java.util.Deque;

public class BrowserHistoryImpl implements BrowserHistory {
    private Deque<String> backStack;
    private Deque<String> forwardStack;
    private String currentUrl;

    public BrowserHistoryImpl(Deque<String> backStack, Deque<String> forwardStack, String currentUrl) {
        this.backStack = backStack;
        this.forwardStack = forwardStack;
        this.currentUrl = currentUrl;
    }

    @Override
    public void visitPage(String url) {
        backStack.push(currentUrl);
        forwardStack.clear();
        currentUrl = url;
    }

    @Override
    public void goBack() {
        if (!backStack.isEmpty()) {
            forwardStack.push(currentUrl);
            currentUrl = backStack.pop();
        } else {
            System.out.println("Cannot go back. Already at the beginning.");
        }
    }

    @Override
    public void goForward() {
        if (!forwardStack.isEmpty()) {
            backStack.push(currentUrl);
            currentUrl = forwardStack.pop();
        } else {
            System.out.println("Cannot go forward. Already at the latest page.");
        }
    }

    @Override
    public String getCurrentPage() {
        return currentUrl;
    }
}
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 5
some-alt