Problemas com ArrayList

6 respostas
Matheus_terra

No código abaixo, estou armazenando diversos alunos com seus respectivos ra e notas em um ArrayList.
O problema é que quando eu adc um aluno na primeira posição do ArrayList, e depois adc outro aluno na segundo posição do ArrayList, as informações do segundo aluno fica no lugar das informações do primeiro aluno, ou seja, o ultimo aluno que eu adc no ArrayList, é add em todas as posições antes da atual dele. Alguem pode me ajudar?

package Exercicio04;

import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.JOptionPane;

public class Notas {
	
	private ArrayList<Notas> info = new ArrayList<Notas>();
	private double nota = 0;
	private String nome;
	private int ra = 0;
	private double maior = 0;
	private double menor = 10;
	private int opcao = 0;
	private int raMaior;
	private int raMenor;
	
		
	public ArrayList<Notas> getInfo() {
		return info;
	}
	
	public void setInfo(ArrayList<Notas> info) {
		this.info = info;
	}

	public double getNota() {
		return nota;
	}

	public void setNota(double nota) {
		nota = Double.parseDouble(JOptionPane.showInputDialog("Nota:"));
		this.nota = nota;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = JOptionPane.showInputDialog("Nome:");
	}

	public int getRa() {
		return ra;
	}

	public void setRa(int ra) {
		ra = Integer.parseInt(JOptionPane.showInputDialog("Ra:"));
		this.ra = ra;
	}

	public double getMaior() {
		return maior;
	}

	public void setMaior(double maior) {
		this.maior = maior;
	}

	public double getMenor() {
		return menor;
	}

	public void setMenor(double menor) {
		this.menor = menor;
	}

	public int getOpcao() {
		return opcao;
	}

	public void setOpcao(int opcao) {
		this.opcao = opcao;
	}
	
	public int getRaMaior() {
		return raMaior;
	}

	public int getRaMenor() {
		return raMenor;
	}

	public void entradaDados(){
		
		
		
		while(opcao != -1){
			
			Notas alunos = new Notas();
			
			opcao = Integer.parseInt(JOptionPane.showInputDialog("Deseja adcionar um novo aluno?\n Sim: 1\n Não: -1"));
			
			if(opcao != -1){	
				
				alunos.setRa(ra);
				alunos.setNome(nome);
				alunos.setNota(nota);
				
					if(alunos.nota > alunos.maior){
						alunos.maior = alunos.nota;
						alunos.raMaior = alunos.ra;
					}
					
					if(alunos.nota < alunos.menor){
						alunos.menor = alunos.nota;
						alunos.raMaior = alunos.ra;
					}
				
				info.add(alunos);
				
				alunos = new Notas();
				
			}else{
				JOptionPane.showMessageDialog(null, "Sessão encerrada");
				opcao = -1;
			}
		}
	}
	
	
	public void alunoMaiorNota() {
		String infoMaior = "";
		Iterator it = info.iterator();
		Notas n;
		boolean achou = false;
		if (info.size() > 0) {
			while (it.hasNext()) {
				n = (Notas) it.next();
				if (n.getRaMaior() == n.getRa()) {
					achou = true;
					infoMaior = "Ra: " + n.getRa() + "\nNome: " + n.getNome()
							+ "\nNota: " + n.getNota();
				}
			}
		} else {
			JOptionPane.showMessageDialog(null, "Nenhum aluno foi adicionado");
		}
		JOptionPane.showMessageDialog(null, "Aluno com a maior nota:\n\n"
				+ infoMaior);
	}
	
	
	public void alunoMenorNota() {
		String infoMenor = "";
		Iterator it = info.iterator();
		Notas n;
		boolean achou = false;
		if (info.size() > 0) {
			while (it.hasNext()) {
				n = (Notas) it.next();
				if (n.getRaMenor() == getRa()) {
					achou = true;
					infoMenor = "Ra: " + n.getRa() + "\nNome: " + n.getNome()
							+ "\nNota: " + n.getNota();
				}
			}
		} else {
			JOptionPane.showMessageDialog(null, "Nenhum aluno foi adicionado");
		}
		JOptionPane.showMessageDialog(null, "Aluno com a menor nota:\n\n"
				+ infoMenor);
	}
}

6 Respostas

rnldfll

E como você está adicionando ao ArrayList?

Matheus_terra

Eu estou setando todos os dados num objeto do tipo Nota, e depois do um add no ArrayList. Só não entendo por que as informações estão se sobrepondo.

ViniGodoy

Você está dando new a cada objeto que põe no ArrayList, certo?

Matheus_terra

Sim! Antes eu só instanciava o objeto uma vez fora do while, ai agora eu estou instanciando um novo a cada volta, mas mesmo assim não vai =/

ViniGodoy

Posta o trecho de codigo onde vc adiciona os objetos na lista.

Matheus_terra

Ta ai. Esse é o método de entrada de dados.

public void entradaDados(){
		
		Notas alunos = new Notas();
		
		while(opcao != -1){
			
			opcao = Integer.parseInt(JOptionPane.showInputDialog("Deseja adcionar um novo aluno?\n Sim: 1\n Não: -1"));
			
			if(opcao != -1){	
				
				alunos.setRa(ra);
				alunos.setNome(nome);
				alunos.setNota(nota);
				
					if(alunos.nota > alunos.maior){
						alunos.maior = alunos.nota;
						alunos.raMaior = alunos.ra;
					}
					
					if(alunos.nota < alunos.menor){
						alunos.menor = alunos.nota;
						alunos.raMaior = alunos.ra;
					}
				
				[b]info.add(alunos);[/b] <<<< aqui eu to adicionando o objeto do tipo Nota com as informações no ArrayList
				
				alunos = new Notas();
				
			}else{
				JOptionPane.showMessageDialog(null, "Sessão encerrada");
				opcao = -1;
			}
		}
	}
Criado 8 de março de 2013
Ultima resposta 10 de mar. de 2013
Respostas 6
Participantes 3