A partir do diagrama de classe abaixo, implemente, em código Java, a classe que represente o co

Pessoal estou com algumas duvidas no meu segundo Exercício.

Problema.

A partir do diagrama de classe abaixo, implemente, em código Java, a classe que represente o comportamento explicitado:

// Meu diagrama
Automovel
quilometragem: double
combustivel: double
abastecer (litros)
trafegar (distancia, litros)
combustivelNoTanque()
quilometragemCarro()

ATRIBUTOS:
 quilometragem: representa quantos km ?rodados? tem o automóvel
 combustivel: representa quantos litros de combustível tem no tanque do automóvel
MÉTODOS:
 abastecer (litros): acrescenta X litros ao tanque do automóvel
 trafegar (distancia, litros): simula uma viagem, acrescentando X (distancia) à quilometragem do automóvel e consumindo X litros do tanque
 combustivelNoTanque(): retorna a quantidade de combustível presente no automóvel
 quilometragemCarro(): retorna a quilometragem do automóvel

  • Crie uma classe de teste (Principal), com o método main, e simule algumas viagens

Código

public class Automovel 
{
	// Atributos
	double quilometragem;
	double combustivel;

	// métodos
	double abastecer(double litros)
	{
		return combustivel += litros;
	} // fim do método combustivel
	
	double trafegar(double distancia, double litros)
	{
		quilometragem += distancia; // Acrescenta (x) a quilometragem
		return quilometragem / abastecer(litros); // Retorna quantos quilometros por lito foi gasto
	} // fim do método trafegar
	
	void combustivelNoTanque(){
		
		double tanque = trafegar(quilometragem, combustivel); // Recebe quantos km foi gasto
		
		System.out.printf("Você tem %.2f litros\n", (tanque - abastecer(combustivel))); // retorna quanto tem no tanque pois total de Combustivel
																		//	- o total quilometro
	} // fim do método combustivelNoTanque
	
	void quilometragemCarro() {
		System.out.printf("Seu carro tem um total %.2f km já rodados", (quilometragem + trafegar(quilometragem, combustivel)) );
	} // fim do metodo quilometragemCarro
}

Classe Principal

import java.util.Scanner; 

public class Principal 
{

	public static void main(String[] args) 
	{
		// Criando um obejto
		Automovel carro = new Automovel();
		
		// Cria um Scaner para obeter a entrada aparti de uma tela de comandos
		Scanner input = new Scanner( System.in );
		
		//Ler informação do usuario
		System.out.print(" Quanto Litros você deseja abaster?: ");
		carro.combustivel = input.nextDouble(); // Armazenando o valor digitado na variavel criada
		
		System.out.print(" Informe qual será a distancia a ser pecorrida?: ");
		carro.quilometragem = input.nextDouble(); // Armazenando o valor digitado na variavel criada
		
		//Passando os valores para nossa classe
		carro.abastecer(carro.combustivel); // Passando o valor digitado para meus atributos
		carro.abastecer(carro.quilometragem); // Passando o valor digitado para meus atributos
		
		//Exibindo os dados
		carro.combustivelNoTanque();
		carro.quilometragemCarro();
	} // fim do método main
} // fim da class Principal 

Está rodando blza, o problema e que o resultado está errado da um valor negativo. Alguém pode mostra onde está o meu erro?

Tem várias coisas estranhas no teu programa. No método main, você fez isto:

		//Ler informação do usuario
		System.out.print(" Quanto Litros você deseja abaster?: ");
		carro.combustivel = input.nextDouble(); // Armazenando o valor digitado na variavel criada
		
		System.out.print(" Informe qual será a distancia a ser pecorrida?: ");
		carro.quilometragem = input.nextDouble(); // Armazenando o valor digitado na variavel criada
		
		//Passando os valores para nossa classe
		carro.abastecer(carro.combustivel); // Passando o valor digitado para meus atributos
		carro.abastecer(carro.quilometragem); // Passando o valor digitado para meus atributos

Repare que você já setou o valor de combustível diretamente (com o dado que o usuário entrou). Ou seja, acaba abastecendo duas vezes. Acho que a ideia era esta:

		//Ler informação do usuario
		System.out.print(" Quanto Litros você deseja abaster?: ");
		double combustivel = input.nextDouble(); // Armazenando o valor digitado na variavel criada
		
		System.out.print(" Informe qual será a distancia a ser pecorrida?: ");
		double quilometragem = input.nextDouble(); // Armazenando o valor digitado na variavel criada
		
		//Passando os valores para nossa classe
		carro.abastecer(carro.combustivel); // Passando o valor digitado para meus atributos
		carro.abastecer(carro.quilometragem); // Passando o valor digitado para meus atributos

Ou seja, criando variáveis locais e depois passando elas para o método abastecer. Os seus métodos combustivelNoTanque e quilometragemCarro não deveriam chamar os métodos abastecer e trafegar. Eles servem apenas para exibir o combustível (variável combustível) e quilometragem (variável quilometragem).

Me parece que você tá confundindo o objetivo dos métodos abastecer e trafegar. Eles servem apenas para modificar o objeto, não use eles para retornar valores. Você não deve usar o método abastecer para saber a quantidade de combustível, por exemplo. Use apenas quando quer abastecer. :smiley:

Então modifiquei o programa, mas fiz umas coisas a mais que não tinha percebido o método abastecer e trafegar tem que ser do tipo void pois não está pedindo retorno. E sim os métodos combustivelNoTanque e quilometragemCarro que tem retorno. Mas está mostrando resultados zerados.

Veja

[code]public class Automovel
{
// Atributos
double quilometragem;
double combustivel;

// métodos
void abastecer(double litros)
{
	combustivel += litros;
} // fim do método combustivel

void trafegar(double distancia, double litros)
{
	quilometragem = ( quilometragem + distancia) / litros; // Acrescenta (x) a quilometragem
	
} // fim do método trafegar

double combustivelNoTanque(){
	
	return combustivel;	
	
} // fim do método combustivelNoTanque

double quilometragemCarro() {	
	return quilometragem;
} // fim do metodo quilometragemCarro

}[/code]

import java.util.Scanner;

[code]public class Principal
{

public static void main(String[] args) 
{
	// Criando um obejto
	Automovel carro = new Automovel();
	
	// Cria um Scaner para obeter a entrada aparti de uma tela de comandos
	Scanner input = new Scanner( System.in );
	
	//Ler informação do usuario
	System.out.print(" Quanto Litros você deseja abaster?: ");
	double combustivel = input.nextDouble(); // Armazenando o valor digitado na variavel criada
	
	System.out.print(" Informe qual será a distancia a ser pecorrida?: ");
	double quilometragem = input.nextDouble(); // Armazenando o valor digitado na variavel criada
	
	//Passando os valores para nossa classe
	carro.abastecer(carro.combustivel); // Passando o valor digitado para meus atributos
	carro.abastecer(carro.quilometragem); // Passando o valor digitado para meus atributos
	
	//Exibindo os dados
	System.out.println( carro.combustivel );
	System.out.println( carro.quilometragemCarro());
} // fim do método main

} // fim da class Principal
[/code]

Quando for passar o valor para sua classe, passe o valor recebido do usuário…
EX:

ao invés de fazer assim: carro.abastecer(carro.combustivel);
passe apenas a variável informada pelo usuário: carro.abastecer(combustivel);

faça a mesma coisa para quilometragem. :slight_smile:

espero ter ajudado

Seu método de trafegar está errado também.
sua quilometragem não tem nada a ver com litros …
ao chamar o método trafegar, apenas adicione a quilometragem e diminua na quantidade de litros.

quilometragem = quilometragem + distancia;
combustivel = combustivel - litros

[code]
public class Automovel
{
// Atributos
double quilometragem;
double combustivel;

// métodos
void abastecer(double litros)
{
	combustivel += litros;
} // fim do método combustivel

void trafegar(double distancia, double litros)
{
	quilometragem = ( quilometragem + distancia) / litros; // Acrescenta (x) a quilometragem
	
} // fim do método trafegar

double combustivelNoTanque(){
	
	return combustivel;	
	
} // fim do método combustivelNoTanque

double quilometragemCarro() {	
	return quilometragem;
} // fim do metodo quilometragemCarro

}[/code]

import java.util.Scanner; 

public class Principal 
{

	public static void main(String[] args) 
	{
		// Criando um obejto
		Automovel carro = new Automovel();
		
		// Cria um Scaner para obeter a entrada aparti de uma tela de comandos
		Scanner input = new Scanner( System.in );
		
		//Ler informação do usuario
		System.out.print(" Quanto Litros você deseja abaster?: ");
		double combustivel = input.nextDouble(); // Armazenando o valor digitado na variavel criada
		
		System.out.print(" Informe qual será a distancia a ser pecorrida?: ");
		double quilometragem = input.nextDouble(); // Armazenando o valor digitado na variavel criada
		
		//Passando os valores para nossa classe
		carro.abastecer( combustivel ); // Passando o valor digitado para meus atributos
		carro.abastecer( quilometragem ); // Passando o valor digitado para meus atributos
		
		//Exibindo os dados
		System.out.println( carro.combustivelNoTanque() );
		System.out.println( carro.quilometragemCarro());
	} // fim do método main
} // fim da class Principal 

Blza o combustivel já esta exibindo. Você estava certo. Mas a quilometragem só mostra zerada?

[quote=Astesio]
Blza o combustivel já esta exibindo. Você estava certo. Mas a quilometragem só mostra zerada?[/quote]

Seu método de trafegar está errado também.
sua quilometragem não tem nada a ver com litros …
ao chamar o método trafegar, apenas adicione a quilometragem e diminua na quantidade de litros.

quilometragem = quilometragem + distancia;
combustivel = combustivel - litros

Ok. Obrigado pela ajuda

deu tudo certo ? se tiver mais alguma duvida, estamos ai pra ajudar ^^

Na verdade ainda não deu.
Mas para falar a verdade estou meio sem graça fica toda hora amolando vocês. Ele ainda continua zerado. veja

public class Automovel 
{
	// Atributos
	double quilometragem;
	double combustivel;

	// métodos
	void abastecer(double litros)
	{
		combustivel += litros;
	} // fim do método combustivel
	
	void trafegar(double distancia, double litros)
	{
		quilometragem += distancia;
		combustivel -= litros; 
	} // fim do método trafegar
	
	double combustivelNoTanque(){
		
		return combustivel;	
		
	} // fim do método combustivelNoTanque
	
	double quilometragemCarro() {	
		return quilometragem;
	} // fim do metodo quilometragemCarro
}[/code]


[code]import java.util.Scanner; 

public class Principal 
{

	public static void main(String[] args) 
	{
		// Criando um obejto
		Automovel carro = new Automovel();
		
		// Cria um Scaner para obeter a entrada aparti de uma tela de comandos
		Scanner input = new Scanner( System.in );
		
		//Ler informação do usuario
		System.out.print(" Quanto Litros você deseja abaster?: ");
		double combustivel = input.nextDouble(); // Armazenando o valor digitado na variavel criada
		
		System.out.print(" Informe qual será a distancia a ser pecorrida?: ");
		double quilometragem = input.nextDouble(); // Armazenando o valor digitado na variavel criada
		
		//Passando os valores para nossa classe
		carro.abastecer( combustivel ); // Passando o valor digitado para meus atributos
		carro.abastecer( quilometragem ); // Passando o valor digitado para meus atributos
		
		//Exibindo os dados
		System.out.println( carro.combustivelNoTanque() );
		System.out.println( carro.quilometragemCarro());
	} // fim do método main
} // fim da class Principal 

com esse código a variável quilometragem vai ficar sempre zerada, já que vc só esta chamando o método abastecer.
repare na sua linha 22 e 23