Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Help Array List Java

public class Main {

    public Main() {

        Aluno p;
        Nota n;

        List<Aluno> pessoas = new ArrayList<Aluno>();
        List<Nota> notas = new ArrayList<Nota>();

        boolean continua = true;

        do {

            p = new Aluno();

            p.setNome(JOptionPane.showInputDialog("Qual seu nome :"));
            p.setSobrenome(JOptionPane.showInputDialog("Qual seu sobrenome :"));
            p.setIdade(Integer.parseInt(JOptionPane.showInputDialog("Qual sua idade :")));

            pessoas.add(p);

            for (int i = 0; i < 4; i++) {

                n = new Nota();

                n.setNota(Double.parseDouble(JOptionPane.showInputDialog("Digite sua " + (i + 1) + " nota :")));

                notas.add(n);

            }



            continua = Boolean.parseBoolean(JOptionPane.showInputDialog("Quer adicionar mais pessoas ? true / false"));

        } while (continua);

        // --------------------------

        for (int i = 0; i < pessoas.size(); i++) {

            System.out.println("Nome : " + pessoas.get(i).getNome());
            System.out.println("Sobrenome : " + pessoas.get(i).getSobrenome());
            System.out.println("----------------------------------");

            for (int j = 0; j < notas.size(); j++) {

                System.out.println(j + 1 + " Nota : " + notas.get(j).getNota());
            }

        }

    }

    public static void main(String[] args) {

        new Main();
    }

Pessoal no código acima com a ArrayList , eu quero para cada Aluno 4 notas, porém quando eu saio do laço e a impressão vem, os nomes saem corretos,mas as notas se concatenam tipo, se eu adiciono 2 alunos, na impressão para cada aluno aparece as 8 notas desses alunos,o que há de errado ?

4 respostas

Oi Marcos, o que está acontecendo é que, você tem 2 ArrayLists, um para os Alunos e outro para as Notas. Até aí tudo bem. No entanto, sempre que você cria um aluno, você o adiciona no ArrayList deAlunos, em seguida, você pergunta as 4 notas e adiciona cada uma delas no ArrayList de notas, e isso é feito para cada aluno.

Por fim, quando você vai imprimir os dados de cada aluno e suas notas, repare que você, para cada aluno, faz um for percorrendo todo ArrayList de Notas. Sendo assim, para o Aluno 1, imprimo todas as notas no ArrayList notas, para o Aluno 2, imprimo todas as notas no ArrayList, para o Aluno 3, imprimo todas as notas no ArrayList e assim por diante.

Daí você tem de corrigir a sua lógica, talvez na classe Aluno, adicionar o ArrayList de notas como uma propriedade do mesmo. Ou então, para manter a estrutura de classes como está, criar uma variável e percorrer esse for de outra maneira, garantindo que cada Aluno terá só as suas 4 notas impressas.

Abraço.

Sim, eu preciso que para cada aluno haja uma arraylist de 4 notas e é isto que está me "empaçocando" a cabeça,de como fazer para que cada aluno possua sua própria array list de notas.

solução!

Cria um array na classe aluno

private List<Nota> notas = new ArrayList<Nota>();

e no main tu vai criar uma lista de notas e depois vai instancia-la com o teu aluno já criado e criar as notas e adicionar nesse teu aluno

List<Nota> notas;
        do {

            p = new Aluno();
            ...
            ...
            pessoas.add(p);
            notas = p.getNotas();

            for (int i = 0; i < 4; i++) {
            ...
            ...
                p.getNotas().add(n);

            }

e pra imprimir tu pode fazer de duas maneiras: mudar o método toString da tua classe Nota ou imprimir quase do mesmo jeito que tu tava fazendo

Isso na classe    Nota
@Override
    public String toString() {
        return "Nota: " + this.nota;
    }

e isso no teu for de alunos que tu imprime o nome e o sobrenome
System.out.println(pessoas.get(i).getNotas() + "\n");

2º sem alterar o toString, lá onde tu tava fazendo

           for (int j = 0; j < 4; j++) {
                System.out.println(j + 1 + " Nota : " + notas.get(j).getNota());

            }

Olhaí se tu consegue me entender :D

Obrigado Vânia, eu me confundo ainda e ainda estou meio perdido neste mais irie conseguir, no mais começei a estudar ArrayList a dois dias então não me surpreende a dificuldade.