alphasil Posted October 21, 2012 at 02:14 PM Report #479919 Posted October 21, 2012 at 02:14 PM Oi ppl; Estou a resolver uma ficha que me está a dar cabo dos miolos 🙂 Tenho este código: import java.util.ArrayList; import java.util.Iterator; /** * Classe para a gestão de alunos inscritos numa turma */ public class Turma { private ArrayList<Aluno> alunos; // Lista de alunos private String aluno; private int nAluno; /** * Devolve o aluno com o número de aluno indicado * * @param numAluno número do aluno * @return Aluno como o número numAluno ou valor null caso não exista na lista de alunos */ public Aluno getAluno(int numAluno) { for(int i=0; i<=alunos.size(); i++) { if(alunos.size()==numAluno) { System.out.println(aluno); } } return null; } /** * Método acrescenta um aluno à lista, tendo em conta que não * é adicionado um aluno com número já existente. * O método retorna true se o aluno for acrescentado ou false nos outros casos * * @param aluno aluno a acrescentar * @return True se aluno foi acrescentado */ public boolean addAluno(Aluno aluno) { for(int i=0; i<=alunos.size(); i++) { //Para comparar strings usa-se o "equals" if(!aluno.equals(alunos.get(i))) { alunos.add(aluno); return true; } } return false; } /** * Lista os alunos da turma (nome e número) */ public void listaAlunos() { System.out.printf("\nPercorrendo o ArrayList (usando iterator)\n"); int i = 0; Iterator<Aluno> iterator = alunos.iterator(); while (iterator.hasNext()) { System.out.printf("Posição %d- %s\n", i, iterator.next()); i++; } } } Sempre que uso o método public Aluno getAluno e public void listaAlunos() Dá-me um erro de java.lang.NullPointerException at Turma.getAluno(Turma.java:24) e no outro método java.lang.NullPointerException at Turma.listaAlunos(Turma.java:65) Alguém consegue explicar-me o porquê? Obrigado gmc11 Â
HappyHippyHippo Posted October 21, 2012 at 02:24 PM Report #479921 Posted October 21, 2012 at 02:24 PM porque não estás a instaciar a lista. dizer que a classe tem uma variável que "será uma lista" não é a mesma coisa que dizer a variável "é" uma lista no construtor da classe adiciona a seguinte linha: this.alunos = new ArrayList<Aluno>(); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
alphasil Posted October 21, 2012 at 02:27 PM Author Report #479922 Posted October 21, 2012 at 02:27 PM Esta parte já está resolvida...esqueci-me de pôr public Turma() { alunos = new ArrayList<Aluno>(); } Agora tenho uma dúvida de principiante nesta parte. Neste método public boolean addAluno(Aluno aluno) { for(int i=0; i<=alunos.size(); i++) { //Para comparar strings usa-se o "equals" if(!aluno.equals(alunos.get(i))) { alunos.add(aluno); return true; } } return false; } O que devo pôr é o quê? Se ponho String dá erro, se ponho int também não dá. Alguma dica? Cumps gmc11 Â
HappyHippyHippo Posted October 21, 2012 at 02:28 PM Report #479923 Posted October 21, 2012 at 02:28 PM (edited) por o quê e aonde ?? PS : se aluno é uma instância de Aluno, porque raio dizes tu para usar equals para comparar strings ??? Edited October 21, 2012 at 02:29 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
alphasil Posted October 21, 2012 at 02:40 PM Author Report #479925 Posted October 21, 2012 at 02:40 PM Oi HHH Obrigado pelas tuas respostas: Tenho de fazer isso /** * Método acrescenta um aluno à lista, tendo em conta que não * é adicionado um aluno com número já existente. * O método retorna true se o aluno for acrescentado ou false nos outros casos * * @param aluno aluno a acrescentar * @return True se aluno foi acrescentado */ Ou seja, pelo que entendi tenho um parâmetro e tenho de verificar no arraylist se existe, se ponho "Carlos" no parâmetro, vai percorrer a list e veriifcar se existe, se existir não adiciona, se existir não. Está errado? gmc11 Â
HappyHippyHippo Posted October 21, 2012 at 02:54 PM Report #479927 Posted October 21, 2012 at 02:54 PM Está errado? sim está 1º - o enunciado pede para que não se insira com o mesmo número e estas a pensar comparar "Carlos" (um string) 2º - no código que apresentas, estás a usar a função equals sobre o objecto Aluno, logo nem estás a comparar strings ou números (isto supondo que não redefiniste a função equals) 3º - se é para verificar a existẽncia de um elemento na lista, usa a função indexOf IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
alphasil Posted October 21, 2012 at 03:23 PM Author Report #479930 Posted October 21, 2012 at 03:23 PM OI HHH Tens razão, nem li isso direito. Para fazer isso preciso de ir buscar a outra classe Aluno... public class Aluno { private int id; // Nº do aluno (identificador único) private String nome; // Nome do aluno /** * Construtor dos objectos da classe Aluno */ public Aluno(String nome, int ID) { this.nome=nome; this.id=ID; } public String getNome() { return nome; } /** * Definir métodos de acesso e de mutação para os campos, * considerando que o nº de aluo não pode ser alterado * getID, getNome, setNome */ } Só depois posso usar o resto então. Ou seja, tenho de chamar a Classe Aluno dentro do método boolean para ler os valores existentes Certo ou nem por isso? 🙂 gmc11 Â
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now