Aplicação não entra na Condição IF

Olá a todos(as).
Pessoal estou estudando um pouco de Java e me deparei com um problema em uma aplicação que estou tentando fazer.
Bom pra resumir eu tenho uma lista de vendas onde tenho os atributos (valorVenda, dataVenda e FormaPagamento), eu preciso filtrar todas as vendas do mês, por exemplo:
Pegar todas as vendas do mês “04/22” (mês/ano)
Somar o valor delas para ver quanto foi o total de vendas nesse mês.

Tenho um método para fazer esse filtro, mas não sei o porque ele não entra na minha condição IF/ELSE para filtrar o mês, ele simplesmente retorna o valor 0 que é nada mais que valor inicial da minha variável que irá receber a soma das vendas.

segue abaixo alguns trecho do código que acredito ajudar na compreensão do problema.

Adicionando valores na lista

vendas.add(new Venda(1,400.0,sdf.parse("11/04/2022"),Finalizadora.CartaoCredito));
		vendas.add(new Venda(2,900.0,sdf.parse("11/04/2022"),Finalizadora.Dinheiro));
		vendas.add(new Venda(3,1400.0,sdf.parse("21/04/2022"),Finalizadora.Pix));
		vendas.add(new Venda(4,1200.0,sdf.parse("30/05/2022"),Finalizadora.CartaoCredito));
		vendas.add(new Venda(5,9000.0,sdf.parse("20/05/2022"),Finalizadora.Dinheiro));
		vendas.add(new Venda(6,3500.0,sdf.parse("01/05/2022"),Finalizadora.Dinheiro));
		vendas.add(new Venda(7,1200.0,sdf.parse("30/05/2022"),Finalizadora.Pix));
		vendas.add(new Venda(8,1346.0,sdf.parse("02/06/2022"),Finalizadora.CartaoCredito));
		vendas.add(new Venda(9,1500.0,sdf.parse("29/06/2022"),Finalizadora.CartaoCredito));
		vendas.add(new Venda(10,1200.0,sdf.parse("30/06/2022"),Finalizadora.CartoDebito));
		vendas.add(new Venda(11,700.0,sdf.parse("30/06/2021"),Finalizadora.CartaoCredito));
		vendas.add(new Venda(12,1000.0,sdf.parse("30/06/2021"),Finalizadora.CartaoCredito));

Método para filtra as venda do mês

private static float calculaValorVendasPorData(int mesEsc, int anoEsc){
	        float soma = (float) 0.0;       
	        int mes, ano;
	        	Calendar calendario = Calendar.getInstance();
	 	 	    mes = 1 + calendario.get(Calendar.MONTH);
	 	 		ano = calendario.get(Calendar.YEAR);
	 	 		 for(Venda v : vendas) {
	        	 calendario.setTime(v.getDataCompra());
	        	     if(mes == mesEsc && ano == anoEsc){
	        	            soma += v.getValor();
	        	 }
	        }
	         return soma;
	    }

Lembrando que o mês e ano são escolhidos pelo usuário através da classe Scanner

mostrando o resultado:

System.out.println("Total de vendas para o período: " + calculaValorVendasPorData(mesEsc,anoEsc));

Resultado no console da IDE:

Escolha o mês (somente numeros): 
04
Escolha o ano (somente numeros): 
2022
400.0
900.0
1400.0
=============
Total de vendas para o período: 0.0

Desde já, agradeço a ajuda.

Estás a comparar o mêsEscolhido com o mes atual, não com o mes da venda. Terias de compara sempre com ano e mes de cadaa data de venda

Mas ao fazer o comando abaixo:
calendario.setTime(v.getDataCompra());
Eu não estou passando para a classe Calendar que ela deve trabalhar com essa data, ou seja, a data que vem da minha classe Venda?
Ou eu tenho que passar ela nesse momento:
Calendar calendario = Calendar.getInstance();.

Depois disso você tem que pegar o mês novamente com calendario.get(Calendar.MONTH). Sem isso, o valor da variável mes não é alterado (o mesmo vale para o ano).

1 curtida

Fiz uns ajuste e agora o método me retorna pelo menos o primeiro valor que ele encontra na lista de acordo com a data de entrada.
segue abaixo o método e o resultado no console.

private static float calculaValorVendasPorData(int mesEsc, int anoEsc){
	        float soma = (float) 0.0;       
	        int mes, ano;
	        	Calendar calendario = Calendar.getInstance();
	 	 		 for(Venda v : vendas) {
	        	 calendario.setTime(v.getDataCompra());
	        	 mes = 1 + calendario.get(Calendar.MONTH);
		 	 	 ano = calendario.get(Calendar.YEAR);
	        	 if(mes == mesEsc && ano == anoEsc){
	        	     soma += v.getValor();
	        	   return soma;
	        	 }
	        	 
	        }
	         return soma;
	    }

Resultado no console me mostra todas as vendas do mês e me retorna a primeira venda e não a soma.

Escolha o mês (somente numeros): 
06
Escolha o ano (somente numeros): 
2022
1346.0
1500.0
1200.0
=============
Total de vendas para o período: 1346.0

Porque será que ele não esta somando esses valores?

Desde já, agradeço a todos pela contribuição.

Vc colocou return soma; dentro do if. Ou seja, na primeira vez que entrar ali, vai retornar e encerrar a execução do método.

Tire esse return daí e deixe só o que está no final.

1 curtida

Funcionou…
Muito obrigado pela ajuda e por sua paciência.