Erro: java.lang.NullPointerException

Olá pessoal!
Estou com um probleminha. estou tentando resgatar os valores que estão em uma classe que está dentro de outra, porém dá o seguinte erro:
Exception in thread “main” java.lang.NullPointerException
at Avaliacao.getMedia(Avaliacao.java:45)
at Avaliacao.toString(Avaliacao.java:52)
at java.lang.String.valueOf(Unknown Source)
at java.io.PrintStream.println(Unknown Source)
at Main.main(Main.java:38)

As classes são:
Aluno;
Avaliação e
Main.

public class Aluno {

private Integer matricula;
private String nome;
private String curso;
private Integer periodo;
private Avaliacao avaliacao;

public Aluno() {
	// TODO Auto-generated constructor stub
}

public Aluno(Integer matricula, String nome, String curso, Integer periodo) {
	super();
	this.matricula = matricula;
	this.nome = nome;
	this.curso = curso;
	this.periodo = periodo;
}

public Integer getMatricula() {
	return matricula;
}

public void setMatricula(Integer matricula) {
	this.matricula = matricula;
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public String getCurso() {
	return curso;
}

public void setCurso(String curso) {
	this.curso = curso;
}

public Integer getPeriodo() {
	return periodo;
}

public void setPeriodo(Integer periodo) {
	this.periodo = periodo;
}

public Avaliacao getAvaliacao() {
	return avaliacao;
}

public void setAvaliacao(Avaliacao avaliacao) {
	this.avaliacao = avaliacao;
}

@Override
public String toString() {
	return "Matricula: " + matricula + "\n" + "Nome: " + nome + "\n"
			+ "Curso: " + curso + "\n" + "Período: " + periodo;
}

}

public class Avaliacao {
private Double nota1;
private Double nota2;
private Double nota3;
private Double media;

public Avaliacao() {
	// TODO Auto-generated constructor stub
}

public Avaliacao(Double nota1, Double nota2, Double nota3, Double media) {
	super();
	this.nota1 = nota1;
	this.nota2 = nota2;
	this.nota3 = nota3;
	this.media = media;
}

public Double getNota1() {
	return nota1;
}

public void setNota1(Double nota1) {
	this.nota1 = nota1;
}

public Double getNota2() {
	return nota2;
}

public void setNota2(Double nota2) {
	this.nota2 = nota2;
}

public Double getNota3() {
	return nota3;
}

public void setNota3(Double nota3) {
	this.nota3 = nota3;
}

public Double getMedia() {

	this.media = (nota1 + nota2 + nota3) / 3;
	return media;
}

@Override
public String toString() {
	return "Nota1: " + nota1 + "\n" + "Nota2: " + nota2 + "\n" + "Nota3: "
			+ nota3 + "\n" + "Media: " + getMedia();
}

}

import java.util.Scanner;

public class Main {
public static void main(String[] args) {

	Aluno a1 = new Aluno();
	Avaliacao av = new Avaliacao();
	 
	@SuppressWarnings("resource")
	Scanner input = new Scanner(System.in);
	
	System.out.println("Digite sua matricula");
	a1.setMatricula(input.nextInt());
	
	System.out.println("Digite seu nome");
	a1.setNome(input.next());
	
	System.out.println("Digite seu curso");
	a1.setCurso(input.next());
	
	System.out.println("Digite seu Periodo");
	a1.setPeriodo(input.nextInt());
	
	a1.setAvaliacao(av);
	
	System.out.println("Digite sua 1ª nota");
	a1.getAvaliacao().setNota1(input.nextDouble());
	
	System.out.println("Digite sua 2ª nota");
	a1.getAvaliacao().setNota2(input.nextDouble());
	
	System.out.println("Digite sua 3ª nota");
	a1.getAvaliacao().setNota2(input.nextDouble());
	
	System.out.println(a1);
	System.out.println(a1.getAvaliacao());
	
	
}

}

Não estou enxergando onde estou errando. Abraços!

Utilize o [ CODE ] para colocar seus código, dessa maneira, ficará mais visível no forum.

Sobre a ajuda que você precisa, coloque para nós todo o stackTrace.

Abraços

Bom dia!

cara seu problema esta no método getMedia() da sua classe Avaliacao. pode ser que uma das notas esteja nulla, coloca um breakpoint nesse método e da uma analisada

Erro browser, favor desconsiderar.

cicero,

Conseguiu? Sugiro que chame o valor de cada nota, no método getMedia(), através dos seus respectivos getters:

public Double getMedia() {
    this.media = (this.getNota1() + this.getNota2() + this.getNota3()) / 3;
    return media;
}

Assim, é possível validar nos getters a coerência de cada nota. Entendeu?

Poste aqui seus resultados. :stuck_out_tongue:

O problema deve estar a ser originado pelo facto de chamar outros métodos que não o nextLine() para ler da consola com o Scanner.

cicero,

o problema está na classe Main, linha 35. Tu estás colocando o valor da nota 3 (teclado) na nota 2, através do setNota2. Entendeu?

Alterar para:

System.out.println("Digite sua 3ª nota");
a1.getAvaliacao().setNota3(input.nextDouble());

Pequena desatenção, o que é normal :wink:

Concordo com o lucasn000, e tb melhor acrescentar return this.media ao final.

Salve manos.
Cicero,tenta trocar na Classe Main o Sétimo “Set”,onde está escrito “Digite sua 3ª nota”.
que está assim: System.out.println(“Digite sua 3ª nota”);
a1.getAvaliacao().setNota2(input.nextDouble());

Para: System.out.println(“Digite sua 3ª nota”);
a1.getAvaliacao().setNota3(input.nextDouble());

Pq é isto que está causando o erro.
Espero ter te ajudado. :wink:

System.out.println("digite nota3");
a1.getAvaliacao().setNota3(sc.nextDouble());

Puxa! como eu deixei isso passar em branco?
Obrigado JAVA Thai!

Obrigado Lucas valeu mesmo.

Cicero, agora que seu problema foi resolvido, edite sua primeira mensagem, e altere o título do tópico para “[Resolvido] erro: java.lang.NullPointerException”!

Exato, siga as orientações do colega acima. E bons estudos! :smiley: