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

9 respostas
eclipsearraylistprogramaçãojava
P

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.

9 Respostas

M

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.

P

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)) {

M

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)) {
    .....
  }
}
P

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.

P

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:

M

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.

S

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

P

Entendi!

P

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

Criado 11 de junho de 2019
Ultima resposta 11 de jun. de 2019
Respostas 9
Participantes 3