Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Udfordring: Implementering af Browserhistorik | Avancerede Datastrukturer i Java
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Java Datastrukturer

bookUdfordring: Implementering af Browserhistorik

Opgave

I forrige kapitel implementerede du et system med to knapper, frem og tilbage, ved brug af den forældede Stack datastruktur, som ikke anbefales til moderne Java-udvikling.

I dette kapitel er din opgave at genkalde den logik, du brugte til at implementere BrowserHistory-klassen og implementere den ved hjælp af Deque datastrukturen.

Forsøg ikke at kigge i det forrige kapitel, men løs opgaven selv—så at sige, "rekod koden". Dette er også fremragende øvelse med GitHub, hvilket vil være gavnligt for dig.

Et interface med alle metoderne er oprettet i koden, som er tilgængelig på GitHub via linket nedenfor. Din opgave er at oprette en klasseimplementering og implementere dette interface ved at overskrive alle dets metoder.

Når du er færdig, kør testene, som jeg har skrevet til dig; det vil automatisk kontrollere din løsning.

Du kan også udføre mellemliggende tests i main-klassen. Overordnet set stoler jeg på din ærlighed og selvstændighed. En sand programmør skal kunne forstå kode selvstændigt!

  • Start med at oprette tre attributter i denne klasse: backStack, forwardStack og currentUrl.
  • Brug derefter en autogenerator til at oprette konstruktøren for denne klasse.
  • Brug implements-nøgleordet og overskriv alle metoderne fra BrowserHistory-interfacet.
  • Benyt i metoderne de Deque- eller Stack-metoder, du tidligere har lært. Husk, at Deque er en moderne og bedre erstatning for Stack datastrukturen.
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;
    }
}
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 5

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

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?

bookUdfordring: Implementering af Browserhistorik

Stryg for at vise menuen

Opgave

I forrige kapitel implementerede du et system med to knapper, frem og tilbage, ved brug af den forældede Stack datastruktur, som ikke anbefales til moderne Java-udvikling.

I dette kapitel er din opgave at genkalde den logik, du brugte til at implementere BrowserHistory-klassen og implementere den ved hjælp af Deque datastrukturen.

Forsøg ikke at kigge i det forrige kapitel, men løs opgaven selv—så at sige, "rekod koden". Dette er også fremragende øvelse med GitHub, hvilket vil være gavnligt for dig.

Et interface med alle metoderne er oprettet i koden, som er tilgængelig på GitHub via linket nedenfor. Din opgave er at oprette en klasseimplementering og implementere dette interface ved at overskrive alle dets metoder.

Når du er færdig, kør testene, som jeg har skrevet til dig; det vil automatisk kontrollere din løsning.

Du kan også udføre mellemliggende tests i main-klassen. Overordnet set stoler jeg på din ærlighed og selvstændighed. En sand programmør skal kunne forstå kode selvstændigt!

  • Start med at oprette tre attributter i denne klasse: backStack, forwardStack og currentUrl.
  • Brug derefter en autogenerator til at oprette konstruktøren for denne klasse.
  • Brug implements-nøgleordet og overskriv alle metoderne fra BrowserHistory-interfacet.
  • Benyt i metoderne de Deque- eller Stack-metoder, du tidligere har lært. Husk, at Deque er en moderne og bedre erstatning for Stack datastrukturen.
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;
    }
}
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 5
some-alt