Dúvida: Erro de Compilação

5 respostas
P

Sou novato em Java.
Na hora de compilar ta dando o seguinte erro: Exception in thread "main" java.lang.NullPointerException
at Exercício2.PrincipalCarro.main(PrincipalCarro.java:23)

Qual foi o meu erro no código?

package Exercício2;

public class Motor {
	private String nome;
	private int cilindros;
	
	public void setNome(String n){
		nome = n;
	}
	
	public void setCilindros(int i){
		cilindros = i;
	}
	
	public String getNome(){
		return nome;
	}
	
	public int getCilindros(){
		return cilindros;
	}
}
package Exercício2;

public class Carro {
	private String nome;
	private long ano;
	private Motor motor;
	
	public void setNome(String n){
		nome = n;
	}
	
	public void setAno(long i){
		ano = i;
	}
	
	public String getNome(){
		return nome;
	}
	
	public long getAno(){
		return ano;
	}
	
	public void setMotor(Motor motor){
		this.motor = motor;
	}
	
	public Motor getMotor(){
		return motor;
	}
}
package Exercício2;

public class PrincipalCarro {

	public static void main(String[] args) {
		Motor one = new Motor();
		one.setNome("V8");
		one.setCilindros(200);
		
		Motor two = new Motor();
		two.setNome("V6");
		two.setCilindros(150);
		
		Carro a = new Carro();
		a.setNome("Ferrari");
		a.setAno(2000);
		
		Carro b = new Carro();
		b.setNome("Porshe");
		b.setAno(2005);
		
		System.out.println("Carro: " + a.getNome() + " " + "Ano: " + a.getAno() + " Motor: " + a.getMotor().getNome());
		System.out.println("Carro: " + b.getNome() + " " + "Ano: " + b.getAno()  + " Motor: " + b.getMotor().getNome());
	}

}

5 Respostas

E

Pra começar, isso é um erro de execução, não de compilação.

E se você prestou atenção (o que você obviamente não fez), seus carros estão sendo fabricados SEM motor, o que está causando esse erro :slight_smile:

S

Em primeiro lugar existe uma diferença entre erro de compilação e erro de execução. O seu caso é o último.

Agora quanto ao seu erro:

Eu não testei seu código tenho quase certeza de que o erro é que você está chamando um método do motor sem instancia-lo.

É um erro muito comum (eu mesmo já o fiz várias vezes). Existem várias formas de arrumar. A mais simples seria adicionar um construtor na classe Carro que não recebe nenhum parametro e dar um new no motor dentro desse construtor.

Isso porque quando você não inicia nenhum atributo do tipo objeto eles são automaticamente iniciados com null.

E

Sem contar que o nome do carro é “Porsche” (embora isso não cause nenhum erro de execução…)

Diguinho.Max

em momento algum vc atribui os motores a seus devidos carros. ou seja vc tem os carros, tem os motores.
mas não há o vinculo entre eles !

exemplo:

Carro a = new Carro()
a.setMotor(one);

quando vc acessa a.getMotor() no seu codigo neste momento o motor é nulo ou seja por isso o erro java.lang.NullPointerException

P

Resolvido. Obrigado a todos :slight_smile:

Criado 30 de abril de 2013
Ultima resposta 30 de abr. de 2013
Respostas 5
Participantes 4