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! 🚀