[RESOLVIDO] Incluir os valores no ARRAY LIST, através do método

Pessoal, eu tenho três classes criadas: Aluno, LeituraAluno e LeituraDisciplina.

O problema é que não estou conseguindo incluir os valores através de um método de setDisciplina (erro na linha 23 em classe LeituraAluno, em alunos.get(x).setDisciplina(d)) o qual o programa NetBeans não reconhece-o.

Alguém pode me ajudar? Segue abaixo as classes criadas.

LeituraAluno.java

package TrabalhoIV;

import java.util.ArrayList;
import javax.swing.JOptionPane;

public class LeituraAluno {
    
    public void ler() {
        ArrayList <Aluno> alunos = new ArrayList <Aluno>();
        int n = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de alunos:"));

        for(int x=0; x< n;x++) {
            alunos.add(new Aluno());
            alunos.get(x).setNome(JOptionPane.showInputDialog("Digite o nome do aluno:"));
            alunos.get(x).setTelefone(Integer.parseInt(JOptionPane.showInputDialog("Digite o nº do telefone do aluno:")));
            alunos.get(x).setUf(JOptionPane.showInputDialog("Digite a UF do aluno:"));
            
            int y = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de disciplina:"));
            
            for(int j=0;j < y;j++) {
                LeituraDisciplina leitura = new LeituraDisciplina();
                Disciplina d = leitura.ler();
                alunos.get(x).setDisciplina(d);
            }
        }
    }
}

LeituraDisciplina.java

package TrabalhoIV;

import javax.swing.JOptionPane;

public class LeituraDisciplina {

    public Disciplina ler() {
        Disciplina disciplina = new Disciplina();
        disciplina.setNome(JOptionPane.showInputDialog("Digite o nome da disciplina:"));
        disciplina.setValor(Integer.parseInt(JOptionPane.showInputDialog("Digite o valor da disciplina:")));
        disciplina.setDuracao(Integer.parseInt(JOptionPane.showInputDialog("Digite a duração da disciplina:")));
        return disciplina;
    }
    
}

Aluno.java

package TrabalhoIV;

import java.util.ArrayList;

public class Aluno {
    private String nome;
    private int telefone;
    private String uf;
    private ArrayList <Disciplina> disciplinas = new ArrayList <Disciplina>();

    public String getNome() {
        return nome;
    }

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

    public int getTelefone() {
        return telefone;
    }

    public void setTelefone(int telefone) {
        this.telefone = telefone;
    }

    public String getUf() {
        return uf;
    }

    public void setUf(String uf) {
        this.uf = uf;
    }

    public ArrayList<Disciplina> getDisciplina() {
        return disciplinas;
    }

    public void setDisciplina(ArrayList<Disciplina> disciplinas) {
        this.disciplinas = disciplinas;
    }
    
}

Desde já, agradeço.

Vinicius.

Bom dia.

Sempre que postar um erro, por favor, poste além da linha que ocorre este erro (como você fez) o stacktrace da exception, caso contrário, fica bem complicado de saber o que pode estar ocorrendo.

Eu recomendo, que não utilize este formato:

[code]
alunos.add(new Aluno());
alunos.get(x).setNome(JOptionPane.showInputDialog(“Digite o nome do aluno:”));
alunos.get(x).setTelefone(Integer.parseInt(JOptionPane.showInputDialog(“Digite o nº do telefone do aluno:”)));
alunos.get(x).setUf(JOptionPane.showInputDialog(“Digite a UF do aluno:”));

         int y = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de disciplina:"));  
           
         for(int j=0;j < y;j++) {  
             LeituraDisciplina leitura = new LeituraDisciplina();  
             Disciplina d = leitura.ler();  
             alunos.get(x).setDisciplina(d); [/code]

Creio que possa deixar este código visualmente muito melhor, assim:

[code] Aluno aluno = new Aluno();

         aluno.setNome(JOptionPane.showInputDialog("Digite o nome do aluno:"));  
         aluno.setTelefone(Integer.parseInt(JOptionPane.showInputDialog("Digite o nº do telefone do aluno:")));  
         aluno.setUf(JOptionPane.showInputDialog("Digite a UF do aluno:"));  
           
         int y = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de disciplina:"));  
           
         for(int j=0;j < y;j++) {  
             LeituraDisciplina leitura = new LeituraDisciplina();  
             Disciplina d = leitura.ler();  
             aluno.setDisciplina(d);
         }
         //agora sim, adicionamos o nosso objeto a lista
         alunos.add(aluno);
} [/code]

Se isto não resolveu o seu problema, poste o stacktrace, fazendo o favor.

Abraços.

Ah, mas calma ai. Já achei o seu problema, não havia visto a classe Aluno.

A classe aluno possui uma lista de objetos do tipo Disciplina e você fez com o que o seu método ler() retorne um objeto Disciplina.
Você tenta setar um objeto disciplina em um objeto ArrayList(), lógico que não vai dar certo.

Mude esta linha:

aluno.setDisciplina(d); 

Por esta:

List<Disciplina> disciplinas = new ArrayList<Disciplinas>(); disciplinas.add(leitura.ler()); aluno.setDisciplina(disciplinas);

Só para deixar claro, o que você realmente deve alterar é o código do seu método Ler() ok?
Pense na melhor forma para ele ser útil á você, mas deve retornar um ArrayList certo? :slight_smile:

Abraços!

Perfeito, nel! Você entendeu perfeitamente qual era foco do problema e logo você fez uma solução mágica!

O seu código funcionou perfeitamente, apenas necessitando retificar de:

List<Disciplina>  disciplinas = new ArrayList<Disciplinas>();  
disciplinas.add(leitura.ler());  
aluno.setDisciplina(disciplinas);  

Para:

ArrayList<Disciplina>  disciplinas = new ArrayList<Disciplinas>();  
disciplinas.add(leitura.ler());  
aluno.setDisciplina(disciplinas);  

O resto está tudo OK! Agora, a classe LeituraAluno com a seguinte conclusão:

package TrabalhoV;

import java.util.ArrayList;
import javax.swing.JOptionPane;

public class LeituraAluno {
    
    public void ler() {
        ArrayList <Aluno> alunos = new ArrayList <Aluno>();
        int n = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de alunos:"));

        for(int x=0; x< n;x++) {
             Aluno aluno = new Aluno();

             aluno.setNome(JOptionPane.showInputDialog("Digite o nome do aluno:"));
             aluno.setTelefone(Integer.parseInt(JOptionPane.showInputDialog("Digite o nº do telefone do aluno:")));
             aluno.setUf(JOptionPane.showInputDialog("Digite a UF do aluno:"));

             int y = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de disciplina:"));

             for(int j=0;j < y;j++) {
                 LeituraDisciplina leitura = new LeituraDisciplina();
                 //Disciplina d = leitura.ler();
                 
                 ArrayList<Disciplina> disciplinas = new ArrayList<Disciplina>();
                 disciplinas.add(leitura.ler());
                 aluno.setDisciplina(disciplinas);
             }
             //agora sim, adicionamos o nosso objeto a lista
             alunos.add(aluno);
        }
    }
}

Até agora, não sei porque o meu código (Disciplina d = leitura.ler()) não é adequado para esse tipo de situação. Só entendi que há necessidade de declarar um ArrayList em função da classe Aluno existir uma lista de objetos tipo Disciplina.

Um abraço, nel!

Vinicius

Que isso cara, estamos aqui para ajudar.

A questão de retificar o seu método ler() é porque ele retorna um Objeto Disciplina, para não ter que instanciar uma ArrayList dentro do seu for você poderia fazer algo assim:

[code] public List ler() {
List disciplinas = new ArrayList();

     int n = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de disciplinas: "));
     for(int i=0; i<n; i++) {
         Disciplina disciplina = new Disciplina();  
         disciplina.setNome(JOptionPane.showInputDialog("Digite o nome da disciplina:"));  
         disciplina.setValor(Integer.parseInt(JOptionPane.showInputDialog("Digite o valor da disciplina:")));  
         disciplina.setDuracao(Integer.parseInt(JOptionPane.showInputDialog("Digite a duração da disciplina:")));
       
         disciplinas.add(disciplina);
     }  
     return disciplinas;  

} [/code]

Pronto. Agora não precisa mais instanciar seu list na classe LeituraAluno, basta chamar o método ler() e setar no seu Objeto Aluno.
Há, não existe mágica, apenas Java mesmo rs. Ficou alguma dúvida? :slight_smile:

Caso não tenha restado dúvidas e o seu problema tenha sido resolvido, poste [Resolvido] ao lado do seu tópico ok? Basta editar ele :slight_smile:

Abraços!

Putz, entendi perfeitamente, nel! Obrigado por me mostrar esta outra maneira de programar. E não estou com mais nenhuma dúvida para isso. Você já esclareceu tudo o suficiente.

Mais uma vez, obrigado nel!

Um abraço,
Vinicius.