Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Desafio: Implementando BrowserHistory | Estruturas de Dados Avançadas em Java
Estruturas de Dados em Java

bookDesafio: Implementando BrowserHistory

Tarefa

No capítulo anterior, você implementou um sistema com dois botões, avançar e voltar, utilizando a estrutura de dados Stack obsoleta, que não é recomendada para uso no desenvolvimento Java moderno.

Neste capítulo, sua tarefa é recordar a lógica utilizada para implementar a classe BrowserHistory e implementá-la utilizando a estrutura de dados Deque.

Tente não consultar o capítulo anterior e complete esta tarefa por conta própria — ou seja, "recrie o código". Isso também é excelente prática com o GitHub, o que será benéfico para você.

Uma interface com todos os métodosfoi criada no código disponível no GitHub através do link abaixo. Sua tarefa é criar uma implementação de classe e implementar esta interface sobrescrevendo todos os seus métodos.

Quando terminar, execute os testes que escrevi para você; isso verificará automaticamente sua solução.

Você também pode realizar testes intermediários na classe main. No geral, confio em sua honestidade e independência. Um verdadeiro programador deve ser capaz de compreender código de forma independente!

  • Comece criando três atributos nesta classe: backStack, forwardStack e currentUrl.
  • Em seguida, utilize um gerador automático para criar o construtor desta classe.
  • Use a palavra-chave implements e sobrescreva todos os métodos da interface BrowserHistory.
  • Nos métodos, utilize os métodos de Deque ou Stack que você aprendeu anteriormente. Lembre-se de que Deque é uma substituição moderna e superior para a estrutura de dados 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;
    }
}
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 5

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

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?

bookDesafio: Implementando BrowserHistory

Deslize para mostrar o menu

Tarefa

No capítulo anterior, você implementou um sistema com dois botões, avançar e voltar, utilizando a estrutura de dados Stack obsoleta, que não é recomendada para uso no desenvolvimento Java moderno.

Neste capítulo, sua tarefa é recordar a lógica utilizada para implementar a classe BrowserHistory e implementá-la utilizando a estrutura de dados Deque.

Tente não consultar o capítulo anterior e complete esta tarefa por conta própria — ou seja, "recrie o código". Isso também é excelente prática com o GitHub, o que será benéfico para você.

Uma interface com todos os métodosfoi criada no código disponível no GitHub através do link abaixo. Sua tarefa é criar uma implementação de classe e implementar esta interface sobrescrevendo todos os seus métodos.

Quando terminar, execute os testes que escrevi para você; isso verificará automaticamente sua solução.

Você também pode realizar testes intermediários na classe main. No geral, confio em sua honestidade e independência. Um verdadeiro programador deve ser capaz de compreender código de forma independente!

  • Comece criando três atributos nesta classe: backStack, forwardStack e currentUrl.
  • Em seguida, utilize um gerador automático para criar o construtor desta classe.
  • Use a palavra-chave implements e sobrescreva todos os métodos da interface BrowserHistory.
  • Nos métodos, utilize os métodos de Deque ou Stack que você aprendeu anteriormente. Lembre-se de que Deque é uma substituição moderna e superior para a estrutura de dados 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;
    }
}
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 5
some-alt