[RESOLVIDO]Ajuda com um exercício!

6 respostas
G
Boa noite amigos do forum...Estou precisando de uma pequena força com um exercício que estou fazendo e não está ficando da forma que o livro ( Deitel 6ª edição) pede. o código que fiz é este..
import java.util.Scanner;

/*Os motoristas se preocupam com a quilometragem dos seus automóveis. Um motorista monitorou
 * vários tanques cheios de gasolina registrando a quilometragem dirigida e a quantidade de
 * combustivel em litros utilizados p/ cada tanque cheio. Escreva um aplicativo Java que receba
 * como entrada os quilômetros dirigidos e os litros de gasolinas consumidos(ambos como inteiros)
 * para cada tanque cheio. O programa deve calcular e exibir o consumo em quilômetros/litro
 * para cada tanque cheio e imprimir a quilometragem combinada e a soma total de litros de
 * combustivel consumidos até esse ponto. Todos os cálculos de média devem produzir resultados de
 * ponto flutuante. Utilize a classe Scanner e repetição controlada por sentinela p/ obter
 * os dados do usuário.
 * */
public class QuilometroPorLitro {

	public static void main(String[] args) {

		int quilometros = 0;
		int litros = 0;
		int consumo = 0;
		double media = 0;
		int totalQuilometros = 0;
        int contador = 1;
        
		Scanner entrada = new Scanner(System.in);

		while (quilometros != -1) {

			totalQuilometros = totalQuilometros + quilometros;

			consumo = consumo + litros;

			media = (double) quilometros / litros;

			System.out.print("Quilômetros rodados ou -1 para sair:");
			quilometros = entrada.nextInt();

			System.out.print("Consumo de combustível ou -1 para sair:");
			litros = entrada.nextInt();

			if (quilometros > 0)
                
				System.out.printf("Média do carro %d: %.2f KM/Litro\n", contador++, 
						(double) quilometros / litros);

		}

		System.out.printf("\nTotal de quilômetros rodados: %d\n",
				totalQuilometros);

		System.out.printf("Total de combustível gasto: %d\n", consumo);

		System.out.printf("Quilômetros por litro: %.2f", media); //  O Problema é aqui, essa instrução deveria gerar uma saida 
                                                                 //da média de todos os carros juntos e não de apenas 1 deles
	}

}
Quando mando ele tirar a média de gasto de combustível para todos os km rodados ele me mostra a média de apenas 1 carro e sempre o ultimo. pq isto está acontecendo? será que estou viajando nos cálculos? A média não é dividir km por litro ? muito obrigado

6 Respostas

ismaelsoj

O erro está aqui: media = (double) quilometros / litros;

Aqui sempre vai acontecer isso…
Vc deve criar uma variável que armazene TODAS as médias e depois divida pelo número de carros contados.

E outra dica… de incremetação

quando vc incrementar, coloque +=. Por exemplo:

Quando você vai incrementar totalQuilometros, ao invés de repetir a variável depois do ==, faça assim: totalQuilometros += quilometros.

Tem o mesmo efeito e o código fica mais elegante. :wink:

ismaelsoj

ismaelsoj:
O erro está aqui: media = (double) quilometros / litros;

Aqui sempre vai acontecer isso…
Vc deve criar uma variável que armazene TODAS as médias e depois divida pelo número de carros contados.

E outra dica… de incremetação

quando vc incrementar, coloque +=. Por exemplo:

Quando você vai incrementar totalQuilometros, ao invés de repetir a variável depois do ==, faça assim: totalQuilometros += quilometros.

Tem o mesmo efeito e o código fica mais elegante. :wink:

Ah… só retificando o que eu disse… o erro está no fato de vc exibir no printf a variável media…

williamdasflores

Está dando erro porque está faltando o caracter “+” na frente das variaveis que vc quer que mostre

System.out.printf("Total de combustível gasto: %d\n", +consumo);  
   
System.out.printf("Quilômetros por litro: %.2f", +media);
ismaelsoj
williamdasflores:
Está dando erro porque está faltando o caracter "+" na frente das variaveis que vc quer que mostre
System.out.printf("Total de combustível gasto: %d\n", +consumo);  
   
System.out.printf("Quilômetros por litro: %.2f", +media);

Não, cara... o código está certo... o System.out.printf() funciona igualzinho ao C.
A questão é que ele não está armazenando as médias obtidas carro a carro... apenas está sobrescrevendo a variável media e exibindo-a quando termina o loop...

williamdasflores

ismaelsoj, blz cara??
Não sabia desse pequeno detalhe. É que só passe por cima, não vi a lógica detalhada, nem testei…
Mas como vc disse acima, está sobreescrevendo a varial média mesmo.
Vlw pela dica cara. :smiley:

G

ismaelsoj:
ismaelsoj:
O erro está aqui: media = (double) quilometros / litros;

Aqui sempre vai acontecer isso…
Vc deve criar uma variável que armazene TODAS as médias e depois divida pelo número de carros contados.

E outra dica… de incremetação

quando vc incrementar, coloque +=. Por exemplo:

Quando você vai incrementar totalQuilometros, ao invés de repetir a variável depois do ==, faça assim: totalQuilometros += quilometros.

Tem o mesmo efeito e o código fica mais elegante. :wink:

Ah… só retificando o que eu disse… o erro está no fato de vc exibir no printf a variável media…


Mudei o printf() para println e ficou na mesma!!!
Mais vou tentando aqui com a dica que vc deu sobre uma variável para armazenar as médias obtidas! Valeu…

Galera, consegui! O lance da variável para armazenar as médias resolveu a parada. Sobre incrementar com += é uma dica interessante, eu já estou familiarizado com este recurso oferecido pelo Java mais no entanto eu ainda não me acostumei a usa-lo( quando eu leio um código assim eu não acho legível ) , mais tenho que me acostumar pois o código fica muito mais elegante e certamente demonstra mais profissionalismo! Valeu galera…Obrigado mesmo…vou fechar o tópico mais tarde ok.

Criado 1 de junho de 2011
Ultima resposta 2 de jun. de 2011
Respostas 6
Participantes 3