Não consigo chamar um método para um objeto da ArrayList

Olá, sou iniciante na graduação de Análise e Desenvolvimento de Sistema, e estou com dificuldade no desenvolvimento de um código que me foi passado como exercício. O exercício que me foi passado corresponde à criação de um controle escolar. Eu consegui resolver a maior parte dele, mas estou com dificuldades de chamar um método específico para ser impresso na Classe main.

Eu criei um método para que seja impresso se o aluno será aprovado, ficará em recuperação ou será reprovado por falta, por meio da obtenção da média e das faltas inseridas. Eu consigo receber a média obtida, mas não consigo obter esse resultado. Se alguém puder me dar uma luz, eu agradeço haha

public class Nota {

private float nota1, nota2, nota3, media, mediaRecup;
private Aluno aluno;

//Construtor 

public Nota() {
	
}

public Nota(float nota1, float nota2) {
	this.nota1 = nota1;
	this.nota2 = nota2;
}

public Nota(float nota1, float nota2, float nota3) {
	this.nota1 = nota1;
	this.nota2 = nota2;
	this.nota3 = nota3;
}

//Métodos

public float getNota1() {
	return nota1;
}

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

public float getNota2() {
	return nota2;
}

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

public float getNota3() {
	return nota3;
}

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

public float media() {
	return media = (nota1 + nota2)/2;
}

public float getMedia() {
	return media();
}

public String situacao() {
	if((getMedia() < 6.0f) && (aluno.getFalta() <= 50)) {
		
		return "Recuperação";
		
	} else if (aluno.getFalta() > 50) {
		
		return "Reprovado por falta";
		
	} else {
		
		return "Aprovado";
	}
}

public String getSituacao() {
	return situacao();
}

public class Aluno {

private String nome, serie;
private int faltas;
protected ArrayList<Nota>notas;
private ArrayList<Professor>professores;
private Turma turma;

//Construtor

public Aluno(String nome, String serie) {
	this.nome = nome;
	this.serie = serie;
	//this.nota = nota;
	this.notas = new ArrayList<Nota>(); 
	this.professores = new ArrayList<Professor>();
}

//Métodos

public String getNome() {
	return nome;
}

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

public String getSerie() {
	return serie;
}

public void setSerie(String serie) {
	this.serie = serie;
}

public int getFalta() {
	return faltas;
}

public void setFalta(int faltas) {
	this.faltas = faltas;
}

public ArrayList<Nota> getNotas() {
	return notas;
}

public void setNotas(ArrayList<Nota> notas) {
	this.notas = notas;
}

public class ProgramaEscola {

public static void main(String[] args) {

	Aluno aluno1 = new Aluno("Hugo", "1º ano/médio");
	Aluno aluno2 = new Aluno("José", "2º ano/médio");
	Aluno aluno3 = new Aluno("Luis", "1º ano/médio");
	Aluno aluno4 = new Aluno("Patricia", "3º ano/médio");
	
	ArrayList<Aluno>alunos = new ArrayList<>();
	
	alunos.add(aluno1);
	alunos.add(aluno2);
	alunos.add(aluno3);
	alunos.add(aluno4);
	
	// =======================================================
	
	Turma turma1 = new Turma('A');
	Turma turma2 = new Turma('B');
	Turma turma3 = new Turma('C');
	
	ArrayList<Turma>turmas = new ArrayList<>();
	
	turmas.add(turma1);
	turmas.add(turma2);
	turmas.add(turma3);
	
	
	aluno1.setTurma(turma1);
	aluno2.setTurma(turma2);
	aluno3.setTurma(turma1);
	aluno4.setTurma(turma3);
	
	Disciplina disciplina1 = new Disciplina("Educação Física");
	Disciplina disciplina2 = new Disciplina("Português");
	Disciplina disciplina3 = new Disciplina("Matemática");
	Disciplina disciplina4 = new Disciplina("Física");
	Disciplina disciplina5 = new Disciplina("História");
	
	ArrayList<Disciplina>disciplinas = new ArrayList<>();
	
	disciplinas.add(disciplina1);
	disciplinas.add(disciplina2);
	disciplinas.add(disciplina3);
	disciplinas.add(disciplina4);
	disciplinas.add(disciplina5);
	
	//============================================================
	
	Professor professor1 = new Professor("Donald", disciplina1);
	Professor professor2 = new Professor("Margarida", disciplina2);
	Professor professor3 = new Professor("Gastão", disciplina3);
	Professor professor4 = new Professor("Pardal", disciplina4);
	Professor professor5 = new Professor("Betina", disciplina5);
									
	
	ArrayList<Professor>professores = new ArrayList<>();
	
	professores.add(professor1);
	professores.add(professor2);
	professores.add(professor3);
	professores.add(professor4);
	professores.add(professor5);
	
	//=============================================================
	
	Nota nota1Aluno1 = new Nota();
	Nota nota2Aluno1 = new Nota();
	
	ArrayList<Nota>notasAluno1 = new ArrayList<>();

	Nota notaAluno2 = new Nota(5.0f, 5.5f);
	ArrayList<Nota>notasAluno2 = new ArrayList<>();
	
	
	//Inseri a nota dentro do aluno específico
	aluno1.notas.add(nota1Aluno1);
	aluno1.notas.add(nota2Aluno1);
	
	aluno2.notas.add(notaAluno2);
	
	//Inseri os valores que eu quis por meio desse código
	nota1Aluno1.setNota1(6.0f);
	nota2Aluno1.setNota2(6.5f);
	
	aluno2.setFalta(10);
	
	System.out.println(aluno2.notas.get(0).getMedia());
	System.out.println(aluno2.notas.get(0).getSituacao());

Obs: Eu queria usar Scanner para obter os valores, mas não aprendi a usar o Scanner com ArrayList ainda para obter os dados já inseridos, então, tenho que fazer tudo com os valores inseridos no construtor mesmo.

Obs2: A minha dúvida é referente ao Aluno2 (no fim da Classe main), pois tentei inserir fazer de outro modo com o Aluno1, mas nem o método media() eu consegui chamar.

Saudações,
Primeiramente seja bem vindo.

Não entendi essa parte:

Eu consigo receber a média obtida, mas não consigo obter esse resultado.

Olá! Obrigado! Acabei escrevendo errado haha Quis dizer que eu consigo acessar o método media() na main, por meio do objeto notasAluno2, mas não estava conseguindo acessar o método situacao(), na classe Nota, para obter o resultado do aluno (aprovado, reprovado).

Eu continuei tentando aqui e descobri que o erro está na primeira linha do método situacao(), na classe Nota, mas, até então, a sintaxe está correta, acho (não deve estar, porque está dando erro haha)

public String situacao() {
if((getMedia() < 6.0f) && (aluno.getFalta() <= 50)) {

pelo que vi está correto sim, poste o erro, fica mais fácil te ajudar.

Fiz um teste aqui com sua logica, apenas coloquei valores fixos.

float media1 = 7.0f;
int faltas = 15;
	
	if((media1 < 6.0f) && (faltas <= 50)) {
		System.out.println("Recuperação");
	} else if (faltas > 50) {
		System.out.println("Reprovado por falta");
	} else {
		System.out.println("Aprovado");
	}

Nesse caso, a saída é : ‘Aprovado’
Faz uma saída de texto pra vc ver o que mostra:

public String situacao() {
   System.out.println("Média: "+getMedia());
   System.out.println("Faltas: "+getFalta());
   
  if((getMedia() < 6.0f) && (aluno.getFalta() <= 50)) {
    .....
  }
}

Certo!

O erro foi esse:

5.25

Exception in thread “main” java.lang.NullPointerException

at escola.Nota.situacao(Nota.java:61)

at escola.ProgramaEscola.main(ProgramaEscola.java:99)

A linha 61 corresponde à primeira linha de código do método situacao(), na classe main, e a linha 99 corresponde à linha de código da chamada do método situacao(), na main.

Os valores que coloquei foram esses:

Nota notaAluno2 = new Nota(5.0f, 5.5f);
aluno2.setFalta(10);

Teria que dar “Recuperação”, mas dá erro :confused:

Certo, ou seja.

System.out.println("Média: "+getMedia());

Ele mostrou certo: 5.25

O erro está ao pegar a falta, ao tentar pegar a falta, ele está dizendo que o valor é null, e não consegue analisar a condição.

O que essa linha retorna?

System.out.println("Faltas: "+getFalta());

Note que seu metodo, vc está analisando a situação do ‘aluno’, ou seja, não é o aluno2.

Porém, quando vc está colocando as faltas, vc está inserindo no aluno2.

O erro acontece pois você não inicializou o atributo aluno na classe Nota.

Mas tem algo muito errado aí, por qual motivo você tem um atributo Aluno na classe Nota?
Uma Nota não tem um Aluno, é o Aluno que deveria ter Notas

Entendi!

Eu concordo com você! Eu coloquei o atributo aluno pra poder chamar o método da falta pro método situacao rs Eu inicializei, mas o erro persistia. Então, deixei sem mesmo rs

E quando eu tirava o atributo aluno o método aluno.getFalta() não executava no método situacao(). Daí tive que deixar na classe Nota mesmo.

Bate em mim não, porque eu só tenho dois meses de aula hahaha

1 curtida