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

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