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

bookUtfordring: Implementering av Browserhistorikk

Oppgave

I forrige kapittel implementerte du et system med to knapper, fremover og bakover, ved bruk av den utdaterte Stack-datastrukturen, som ikke anbefales for bruk i moderne Java-utvikling.

I dette kapittelet er oppgaven din å huske logikken du brukte for å implementere BrowserHistory-klassen og implementere den ved hjelp av Deque-datastrukturen.

Forsøk å ikke se på forrige kapittel og fullfør denne oppgaven på egenhånd—så å si, "kode om koden." Dette er også utmerket øvelse med GitHub, noe som vil være gunstig for deg.

Et grensesnitt med alle metodene er opprettet i koden som er tilgjengelig på GitHub via lenken nedenfor. Din oppgave er å lage en klasseimplementasjon og implementere dette grensesnittet ved å overstyre alle dets metoder.

Når du er ferdig, kjør testene som jeg har skrevet for deg; det vil automatisk sjekke løsningen din.

Du kan også utføre mellomtester i main-klassen. Alt i alt stoler jeg på din ærlighet og selvstendighet. En ekte programmerer bør kunne forstå kode på egenhånd!

  • Start med å opprette tre attributter i denne klassen: backStack, forwardStack og currentUrl.
  • Bruk deretter en autogenerator for å lage konstruktøren for denne klassen.
  • Bruk implements-nøkkelordet og overstyr alle metodene i BrowserHistory-grensesnittet.
  • I metodene, bruk Deque- eller Stack-metodene du har lært tidligere. 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;
    }
}
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 5

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

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?

bookUtfordring: Implementering av Browserhistorikk

Sveip for å vise menyen

Oppgave

I forrige kapittel implementerte du et system med to knapper, fremover og bakover, ved bruk av den utdaterte Stack-datastrukturen, som ikke anbefales for bruk i moderne Java-utvikling.

I dette kapittelet er oppgaven din å huske logikken du brukte for å implementere BrowserHistory-klassen og implementere den ved hjelp av Deque-datastrukturen.

Forsøk å ikke se på forrige kapittel og fullfør denne oppgaven på egenhånd—så å si, "kode om koden." Dette er også utmerket øvelse med GitHub, noe som vil være gunstig for deg.

Et grensesnitt med alle metodene er opprettet i koden som er tilgjengelig på GitHub via lenken nedenfor. Din oppgave er å lage en klasseimplementasjon og implementere dette grensesnittet ved å overstyre alle dets metoder.

Når du er ferdig, kjør testene som jeg har skrevet for deg; det vil automatisk sjekke løsningen din.

Du kan også utføre mellomtester i main-klassen. Alt i alt stoler jeg på din ærlighet og selvstendighet. En ekte programmerer bør kunne forstå kode på egenhånd!

  • Start med å opprette tre attributter i denne klassen: backStack, forwardStack og currentUrl.
  • Bruk deretter en autogenerator for å lage konstruktøren for denne klassen.
  • Bruk implements-nøkkelordet og overstyr alle metodene i BrowserHistory-grensesnittet.
  • I metodene, bruk Deque- eller Stack-metodene du har lært tidligere. 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;
    }
}
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 5
some-alt