Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Défi : Implémentation de l’Historique du Navigateur | Structures de Données Avancées en Java
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Structures de Données Java

bookDéfi : Implémentation de l’Historique du Navigateur

Tâche

Dans le chapitre précédent, vous avez implémenté un système avec deux boutons, avant et arrière, en utilisant la structure de données Stack obsolète, qui n'est pas recommandée pour une utilisation en développement Java moderne.

Dans ce chapitre, il s'agit de vous rappeler la logique utilisée pour implémenter la classe BrowserHistory et de la réimplémenter en utilisant la structure de données Deque.

Essayez de ne pas consulter le chapitre précédent et réalisez cette tâche par vous-même—en quelque sorte, « recoder le code ». Il s'agit également d'un excellent exercice avec GitHub, ce qui sera bénéfique pour vous.

Une interface avec toutes les méthodes a été créée dans le code disponible sur GitHub via le lien ci-dessous. Votre tâche consiste à créer une implémentation de classe et à implémenter cette interface en redéfinissant toutes ses méthodes.

Une fois terminé, exécutez les tests que j'ai écrits pour vous ; cela vérifiera automatiquement votre solution.

Vous pouvez également effectuer des tests intermédiaires dans la classe main. Globalement, je compte sur votre honnêteté et autonomie. Un véritable programmeur doit être capable de comprendre le code de manière indépendante !

  • Commencer par créer trois attributs dans cette classe : backStack, forwardStack et currentUrl.
  • Ensuite, utiliser un générateur automatique pour créer le constructeur de cette classe.
  • Utiliser le mot-clé implements et redéfinir toutes les méthodes de l'interface BrowserHistory.
  • Dans les méthodes, utiliser les méthodes de Deque ou Stack étudiées précédemment. Garder à l'esprit que Deque est une alternative moderne et supérieure à la structure de données Stack.
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;
    }
}
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 5

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

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?

bookDéfi : Implémentation de l’Historique du Navigateur

Glissez pour afficher le menu

Tâche

Dans le chapitre précédent, vous avez implémenté un système avec deux boutons, avant et arrière, en utilisant la structure de données Stack obsolète, qui n'est pas recommandée pour une utilisation en développement Java moderne.

Dans ce chapitre, il s'agit de vous rappeler la logique utilisée pour implémenter la classe BrowserHistory et de la réimplémenter en utilisant la structure de données Deque.

Essayez de ne pas consulter le chapitre précédent et réalisez cette tâche par vous-même—en quelque sorte, « recoder le code ». Il s'agit également d'un excellent exercice avec GitHub, ce qui sera bénéfique pour vous.

Une interface avec toutes les méthodes a été créée dans le code disponible sur GitHub via le lien ci-dessous. Votre tâche consiste à créer une implémentation de classe et à implémenter cette interface en redéfinissant toutes ses méthodes.

Une fois terminé, exécutez les tests que j'ai écrits pour vous ; cela vérifiera automatiquement votre solution.

Vous pouvez également effectuer des tests intermédiaires dans la classe main. Globalement, je compte sur votre honnêteté et autonomie. Un véritable programmeur doit être capable de comprendre le code de manière indépendante !

  • Commencer par créer trois attributs dans cette classe : backStack, forwardStack et currentUrl.
  • Ensuite, utiliser un générateur automatique pour créer le constructeur de cette classe.
  • Utiliser le mot-clé implements et redéfinir toutes les méthodes de l'interface BrowserHistory.
  • Dans les méthodes, utiliser les méthodes de Deque ou Stack étudiées précédemment. Garder à l'esprit que Deque est une alternative moderne et supérieure à la structure de données Stack.
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;
    }
}
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 5
some-alt