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
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

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