Udfordring: 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,forwardStackogcurrentUrl. - 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- ellerStack-metoder, du tidligere har lært. Husk, atDequeer en moderne og bedre erstatning forStackdatastrukturen.
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;
}
}
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
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?
Fantastisk!
Completion rate forbedret til 4
Udfordring: 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,forwardStackogcurrentUrl. - 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- ellerStack-metoder, du tidligere har lært. Husk, atDequeer en moderne og bedre erstatning forStackdatastrukturen.
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;
}
}
Tak for dine kommentarer!