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

Utilizando as classes criadas no exercício anterior crie uma nova classe Turma como mostrado no diagrama UML abaixo:
Turma
- vetor : ArrayList<Aluno>
+ Turma()
+ numeroAlunos() : int
+ adicionaAluno(aluno : Aluno)
+ toString() : String
+ buscaAluno(nome : String) : ArrayList<Aluno>
+ removeAluno(ra : int) : boolean
+ lerAluno(input : Scanner) : Aluno
+ main(args: String[])
No método main crie um objeto de tipo Turma e um menú com opções para: adicionar um aluno na turma, visualizar as características de todos os alunos da turma, remover um aluno pelo RA, buscar alunos pelo nome e sair do programa. Um aluno só pode ser adicionado se não existe outro idêntico em vetor.
O rebanho caprino de uma ilha do mediterrâneo está sujeito a uma radiação natural que provoca a mutação do gene responsável pela pelagem parda ( B , dominante) para o gene responsável pela pelagem albina (b, recessivo), numa taxa de 0,25. Em 2005, dos 8 mil caprinos dessa ilha, 5000 eram homozigotos, dos quais apenas 500 eram albinos. Se, a partir desse ano, uma usina nuclear começa a emitir radiação que desencadeie uma mutação do gene b para o B na taxa de 1:100, qual a frequência genotípica de animais albinos, após uma geração?
Criar as classes Serie e Inflacao como descritas no diagrama UML mostrado a seguir:
Serie
- descricao : String
- dados : double[]
+ Serie(desc: String, dados : double[])
+ dados() : double[]
+ valor(ind : int) : double
+ descricao(): String
+ toString(): String
+ equals(obj : Object) : boolean

Inflacao

  • ano : int
  • acumulado: double
  • Inflacao(desc : String, ano : int, valores : double[], acumulado : double)
  • indices () double[]
  • ano() : int
  • indiceMes(mes : int) : double
  • acumulado() : double
  • toString() : String
  • equals(obj: Object) : boolean
    Observe a assinatura dos métodos para descobrir sua funcionalidade.
Para realizar a divulgação de um filme, um cinema fez a seguinte promoção: irá sortear cinco copos personalizados do filme entre os participantes de uma certa sessão. Dois amigos estão assistindo o filme na sessão em que será realizado o sorteio dos copos. Se 40 pessoas estão presentes na sessão, a probabilidade de os dois amigos serem sorteados é
a)
b)
c)
d)
e)