Alguém me da uma força para completar esse programa

O que o programa deve fazer

  1. Totalize a quantidade de atendimentos que foram realizados para cada animal;
  2. Calcule o valor que deverá ser cobrado referente a cada animal, conforme valor de consulta
    fornecido pelo repositório;
  3. Liste no terminal os valores que serão cobrados referentes a cada animal.

package clinica;

import java.util.List;

public class Principal {
// Atenção: essa classe não deve ser alterada

public static void main(String[] args) {
	// carregar lista de atendimentos do repositório
	Repositorio repositorio = new Repositorio();
	List<String> atendimentos = repositorio.todosAtendimentos();
	double precoConsulta = repositorio.getPrecoConsulta();
	
	System.out.println("Atendimentos realizados: \n" + atendimentos + "\n");
	
	
	Faturamento faturamento = new Faturamento(atendimentos, precoConsulta);
	faturamento.processar();
	faturamento.listar();
}

}
package clinica;

import java.util.ArrayList;
import java.util.List;

public class Repositorio {
// Atenção: essa classe não deve ser alterada

public List<String> todosAtendimentos() {
	List<String> atendimentos = new ArrayList<String>();
	atendimentos.add("Totó");
	atendimentos.add("Mel");
	atendimentos.add("Garfield");
	atendimentos.add("Rex");
	atendimentos.add("Totó");
	atendimentos.add("Rex");
	atendimentos.add("Bolt");
	atendimentos.add("Nina");
	atendimentos.add("Capachão");
	atendimentos.add("Fifi");
	atendimentos.add("Fifi");
	atendimentos.add("Rex");
	atendimentos.add("Paçoca");
	atendimentos.add("Pipoca");
	atendimentos.add("Amora");
	atendimentos.add("Kiara");
	atendimentos.add("Kiara");
	atendimentos.add("Meg");
	atendimentos.add("Bolt");
	atendimentos.add("Gigi");
	atendimentos.add("Bolt");
	atendimentos.add("Pipoca");
	atendimentos.add("Scooby");
	atendimentos.add("Bolt");
	atendimentos.add("Bolt");
	atendimentos.add("Mafalda");
	atendimentos.add("Capachão");
	atendimentos.add("Marley");
	atendimentos.add("Scooby");
	atendimentos.add("Lua");
	atendimentos.add("Bolt");
	return atendimentos;
}

public double getPrecoConsulta() {
	return 79.43;
}

}
package clinica;

import java.util.List;

public class Faturamento {

public Faturamento(List<String> atendimentos, double precoConsulta) {
	// TODO Auto-generated constructor stub
}

public void processar() {
	// TODO Auto-generated method stub
	
}

public void listar() {
	// TODO Auto-generated method stub
	
}

}

está ai o que ja fiz

Cara eu tirei esse método processar na classe Faturamento, porque você já passa toda a assinatura necessária para processar no construtor, ficou assim:

import java.text.DecimalFormat;
import java.util.List;

public class Faturamento {
	
	public double faturamento;
	int totalAtendimentos;
	DecimalFormat virgula = new DecimalFormat("0.00");
	
	public Faturamento(List<String> atendimentos, double precoConsulta) {
		
		this.faturamento = atendimentos.size() * precoConsulta;
		this.totalAtendimentos = atendimentos.size();
	}

	public void listar() {		
		System.out.println("Total de atendimentos: "+ totalAtendimentos);
		System.out.println("Faturamento total é de: " + virgula.format(faturamento));		
	}

}

O pagamento é o tamanho da lista x preço.

1 curtida

Putz agora que vi aqui, você quer outra coisa, eu só fiz um faturamento total dos atendimentos kkkkk, perai.

1 curtida

Consegui, deu um trabalho, pq tinha que isolar os dados repetidos então muitas vezes ele ate mostrava o preço de atendimento dos cachorro mas repetia o mesmo cachorro, infelizmente tive que usar Stream API, não sei se você estudou ainda, é um pouco avançado mas foi a maneira que consegui.

Classe Principal (NÃO MUDEI NADA):

import java.util.List;

public class Principal {
	
	public static void main(String[] args) {
		
		
		Repositorio repositorio = new Repositorio();
		List<String> atendimentos = repositorio.todosAtendimentos();
		double precoConsulta = repositorio.getPrecoConsulta();
		
		System.out.println("Atendimentos realizados: \n" + atendimentos + "\n");
			
		
		Faturamento faturamento = new Faturamento(atendimentos, precoConsulta);
		faturamento.processar(atendimentos, precoConsulta);
		faturamento.listar();
	}
	
	}

Classe repositório (NÃO MUDEI NADA):

import java.util.ArrayList;
import java.util.List;

public class Repositorio {

	public List<String> todosAtendimentos() {
		List<String> atendimentos = new ArrayList<String>();
		atendimentos.add("Totó");
		atendimentos.add("Mel");
		atendimentos.add("Garfield");
		atendimentos.add("Rex");
		atendimentos.add("Totó");
		atendimentos.add("Rex");
		atendimentos.add("Bolt");
		atendimentos.add("Nina");
		atendimentos.add("Capachão");
		atendimentos.add("Fifi");
		atendimentos.add("Fifi");
		atendimentos.add("Rex");
		atendimentos.add("Paçoca");
		atendimentos.add("Pipoca");
		atendimentos.add("Amora");
		atendimentos.add("Kiara");
		atendimentos.add("Kiara");
		atendimentos.add("Meg");
		atendimentos.add("Bolt");
		atendimentos.add("Gigi");
		atendimentos.add("Bolt");
		atendimentos.add("Pipoca");
		atendimentos.add("Scooby");
		atendimentos.add("Bolt");
		atendimentos.add("Bolt");
		atendimentos.add("Mafalda");
		atendimentos.add("Capachão");
		atendimentos.add("Marley");
		atendimentos.add("Scooby");
		atendimentos.add("Lua");
		atendimentos.add("Bolt");
		return atendimentos;
	}

	public double getPrecoConsulta() {
		return 79.43;
	}

	}

Classe Faturamento:

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Collectors;

public class Faturamento {
	
	
	List<String> atendimentos;
	public double faturamento;
	int totalAtendimentos;
	static DecimalFormat virgula = new DecimalFormat("0.00");
	static List<Object> dados = new ArrayList<Object>();
	
	public Faturamento(List<String> atendimentos, double precoConsulta) {
		
		this.faturamento = atendimentos.size() * precoConsulta;
		this.totalAtendimentos = atendimentos.size();
	}
	
	public void processar(List<String> atend, double precoConsult)
	{
		
		int qnt=0;
		atend.size();
		atend.get(0);
		for(int i=0;i<atend.size();i++)
		{
			String name = atend.get(i);
			for(String corre : atend)
			{
				if(corre.equals(name))
				{
				qnt++;	
				}
			}				
			double fat = qnt * precoConsult;
			String ads = atend.get(i) +" teve "+ qnt+ " atendimentos, preço total = "+ virgula.format(fat);
			dados.add(ads);
			qnt=0;
			fat=0;
		}
	}

	public void listar() {		
		System.out.println("Total de atendimentos: "+ totalAtendimentos+"\n");
		System.out.println("Faturamento total é de: " + virgula.format(faturamento)+"\n");
		System.out.println("Faturamento por cachorro:\n");
		Consumer<Object> imprimir = System.out::println;
		dados.stream().distinct().collect(Collectors.toList()).forEach(imprimir);;
	}

}

Nesse método processar eu coloquei um for para ele percorrer o a lista e comparando os índices, ou seja ele pega o nome de lista índice 0 e compara com todos os outros nomes se um desses nomes for igual a ele, ele adiciona +1 na quantidade, quando e faz isso nome por nome, e depois pega a quantidade e multiplica pelo faturamento e depois armazena tudo em outra lista chamada dados.

No método listar, ele vai listar o total de atendimentos, o faturamento total e a lista com o preço de cada cachorro dependendo do numero de atendimentos, aqui eu tive que usar stream para distinguir o que é repetido ou não, por exemplo: o Totó teve atendimento 2x, mas logo ele armazenava Totó atendido 2x = 79, Totó atendido 2x=79, de acordo com a incidência de repetição ele mostrava resultado varias vezes, então com o stream consegui isolar dados iguais.
O DecimalFormat é para ele arredondar o preço e mostrar apenas duas casas decimais, fica mais autêntico.
Qualquer dúvida me informe.
A saída ficou dessa forma:

2 curtidas

mano, muito obrigado mesmo eu estava quebrando a cabeça alterando a classe principal e tudo mais. agora vendo do jeito que você fez consegui entender melhor