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;
}
}
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.
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?
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.
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?
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
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.