Crie uma classe HistoricoInflacao que utiliza as duas classes do exercício anterior como no diagrama UML a seguir:
HistoricoInflacao
- serie : java.util.ArrayList
+ Historicolnflacao()
+ serie() : java.util.ArrayList
+ adicionar(infla: Inflacao)
+ toString() : String
+ lerınflacao(teclado : java.util.Scanner) : Inflacao
+ buscar(ano: int) : Inflacao
+ main(args: String[l])
O método adicionar acrescenta um objeto Inflacao à serie somente se não existe outro igual armazenado. O método lerInflacao cria um objeto de tipo Inflacao a partir dos dados fornecidos pelo usuário através do teclado. O main cria um menú com opções para adicionar, visualizar a serie de inflação armazenada, visualizar os dados da inflação de um determinado ano e encerrar a execução do programa.

Passo 1

Beleza, vamos lá! O enunciado pede para criar uma classe chamada HistoricoInflacao em Java. Essa classe vai usar duas outras classes que foram mencionadas no exercício anterior (como o Inflacao, que provavelmente representa dados de inflação). A matéria aqui envolve Programação Orientada a Objetos e Estruturas de Dados usando ArrayList. Vamos precisar entender como criar classes, métodos, utilizar listas para armazenar objetos e interagir com o usuário via teclado.

Passo 2

Primeiro, vamos importar o que precisamos. Vamos usar java.util.ArrayList para armazenar os objetos de inflação e java.util.Scanner para ler dados do usuário.
import java.util.ArrayList;
import java.util.Scanner;

Passo 3

Agora, vamos definir a classe HistoricoInflacao e declarar um atributo privado chamado serie, que será uma lista (ArrayList) de objetos Inflacao.
public class HistoricoInflacao {
    private ArrayList<Inflacao> serie;

    public HistoricoInflacao() {
        serie = new ArrayList<>();
    }
Aqui, criamos o construtor que inicializa a lista serie.

Passo 4

Vamos criar os métodos principais. Primeiro, um método para adicionar um objeto Inflacao à lista, mas somente se não existir outro igual. Para isso, vamos verificar se a lista já contém o objeto antes de adicionar.
    public void adicionar(Inflacao infla) {
        if (!serie.contains(infla)) {
            serie.add(infla);
            System.out.println("Inflação adicionada com sucesso!");
        } else {
            System.out.println("Inflação já existe na série.");
        }
    }
Explicação: Usamos o método contains da ArrayList para verificar se o objeto já está na lista. Se não estiver, adicionamos com add.

Passo 5

Vamos criar o método lerInflacao que vai ler os dados do usuário e criar um objeto Inflacao. Supondo que a classe Inflacao tem atributos como ano e valor, faremos algo assim:
    public Inflacao lerInflacao(Scanner teclado) {
        System.out.print("Digite o ano: ");
        int ano = teclado.nextInt();
        System.out.print("Digite a taxa de inflação: ");
        double valor = teclado.nextDouble();
        return new Inflacao(ano, valor);
    }
Explicação: Utilizamos o Scanner para ler o ano e o valor da inflação e então criamos um novo objeto Inflacao com esses dados.

Passo 6

Vamos implementar o método buscar que encontra uma inflação por ano.
    public Inflacao buscar(int ano) {
        for (Inflacao infla : serie) {
            if (infla.getAno() == ano) {
                return infla;
            }
        }
        return null; // Se não encontrar
    }
Explicação: Percorremos a lista serie e comparamos o ano de cada objeto Inflacao com o ano buscado. Se encontrar, retornamos o objeto; se não, retornamos null.

Passo 7

Vamos sobrescrever o método toString para facilitar a visualização dos dados.
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        for (Inflacao infla : serie) {
            sb.append(infla.toString()).append("\n");
        }
        return sb.toString();
    }
Explicação: Usamos um StringBuilder para concatenar as representações em string de cada objeto Inflacao na lista.

Passo 8

Agora, vamos criar o método main que vai exibir um menu para o usuário interagir.
    public static void main(String[] args) {
        HistoricoInflacao historico = new HistoricoInflacao();
        Scanner teclado = new Scanner(System.in);
        int opcao;

        do {
            System.out.println("Menu de Opções:");
            System.out.println("1. Adicionar Inflação");
            System.out.println("2. Visualizar Série de Inflação");
            System.out.println("3. Buscar Inflação por Ano");
            System.out.println("4. Sair");
            System.out.print("Escolha uma opção: ");
            opcao = teclado.nextInt();

            switch (opcao) {
                case 1:
                    Inflacao novaInfla = historico.lerInflacao(teclado);
                    historico.adicionar(novaInfla);
                    break;
                case 2:
                    System.out.println("Série de Inflação:");
                    System.out.println(historico.toString());
                    break;
                case 3:
                    System.out.print("Digite o ano para buscar: ");
                    int ano = teclado.nextInt();
                    Inflacao encontrada = historico.buscar(ano);
                    if (encontrada != null) {
                        System.out.println("Inflação encontrada: " + encontrada.toString());
                    } else {
                        System.out.println("Nenhuma inflação encontrada para o ano " + ano);
                    }
                    break;
                case 4:
                    System.out.println("Encerrando o programa.");
                    break;
                default:
                    System.out.println("Opção inválida. Tente novamente.");
            }

        } while (opcao != 4);

        teclado.close();
    }
}
Explicação: O main cria uma instância de HistoricoInflacao e um Scanner para ler as opções do usuário. Ele mostra um menu com opções para adicionar, visualizar, buscar e sair. Dependendo da escolha, chama os métodos correspondentes.

Resposta

Prontinho! Agora você tem a classe HistoricoInflacao completa, que permite adicionar, visualizar e buscar dados de inflação de forma interativa. Basta garantir que a classe Inflacao esteja bem definida com os métodos necessários como getAno() e toString(). Boa programação! 🚀

Exercícios relacionados