Eu tenho uma lista de alunos e um método para consultar um aluno da lista, usei o foreach para percorrer a lista e retornar um objeto pesquisado, usei o return nomeDoObjeto. Só não deu certo.
No caso não retorna nada.
publicAlunoAcademiaconsultaAluno(){Scannerpega=newScanner(System.in);System.out.println("Informe o cpf ou o nome do aluno: ");Stringdado=pega.next();pega.reset();for(AlunoAcademiaaluno:this.alunosAcademia){if(aluno.getCpf().equalsIgnoreCase(dado)||aluno.getNome().equalsIgnoreCase(dado)){returnaluno;}}returnnull;}
Se não está retornando nada, então sua lista está vindo vazia, na sua classe como você esta populando ela ???
ViniGodoy
Que jeito esquisito de ler do Scanner é esse? Não era mais fácil só usar o nextLine(), como é recomendado quando se usa o console?
MarkKnopfler
ViniGodoy escreveu:
Que jeito esquisito de ler do Scanner é esse? Não era mais fácil só usar o nextLine(), como é recomendado quando se usa o console?
cido18 escreveu:
Se não está retornando nada, então sua lista está vindo vazia, na sua classe como você esta populando ela ???
Pois é, dá um System.err.println( … ) na variável dado e em aluno.getNome() e alugno.getCpf(), alguma informação deve estar vazia mesmo (ou a lista ou a String do teclado)
guj1
[quote=MarkKnopfler]
ViniGodoy escreveu:
Pois é, dá um System.err.println( … ) na variável dado e em aluno.getNome() e alugno.getCpf(), alguma informação deve estar vazia mesmo (ou a lista ou a String do teclado)
Perdão pela demora, provas da faculdade finalizadas.
Bom eu fiz o que vc pediu e retornou: snv_desenv.AlunoAcademia@adb24
Na verdade, antes de vc responder isso, uma pergunta. Eu posso fazer isso neh?
Varrer uma lista e pedir para imprimir todos os dados de uma vez dando um sysout(posicaoLista)?
código corrigido:
//Consulta um determinado aluno com o cpf informado pelo usuário.publicvoidconsultaAluno(){System.out.println("Informe o cpf do aluno: ");Stringdado=this.pega.nextLine();this.pega.reset();for(AlunoAcademiaaluno:this.alunosAcademia){if(aluno.getCpf().equalsIgnoreCase(dado)||aluno.getNome().equalsIgnoreCase(dado)){System.out.println(aluno);}}}
Grato.
ViniGodoy
Você pode sim. Mas tem que ter certeza que a lista não está vazia.
Imprime aí o valor de this.alunosAcademia.size();
guj1
ViniGodoy:
Você pode sim. Mas tem que ter certeza que a lista não está vazia.
Imprime aí o valor de this.alunosAcademia.size();
Eu fiz o seguinte teste.
Adicionei um validador para dizer se a lista está vazia ou não. E dá certo, quando a lista está vazia ele dá a mensagem "A lista estã vazia". Daí eu adicionei um aluno, e tentei consultar e dá o mesmo erro que citei acima.
Eu alterei o código e deixei como abaixo, está certo, já que cada método só pode ter um return? Eu posso fazer isso?
//Consulta um determinado aluno com o cpf informado pelo usuário.publicAlunoAcademiaconsultaAluno(){while(this.validador){if(alunosAcademia.size()>0){System.out.println("Informe o cpf do aluno: ");Stringdado=this.pega.nextLine();this.pega.reset();for(AlunoAcademiaaluno:this.alunosAcademia){if(aluno.getCpf().equalsIgnoreCase(dado)){returnaluno;//System.out.println(aluno);}}break;}else{System.out.println("A lista está vazia.");break;}}returnnull;}
guj1
Vinigodoy
Não é duplicação de tópico. Eu tratei de dúvidas diferentes em partes diferentes do meu código.
A dúvida lá é: eu desejo saber por que for é ignorado, aqui é o returno de todos os atributos de um objeto.
Diferentes não?
Você poderia desbloquear, a não quer vc queira que eu questione a outra dúvida aqui? Eu acho que é musturuar muitas duvidas em um tópico.
ViniGodoy
Você tem certeza que o dado tem o CPF de um aluno?
Tanto o erro desse tópico, quanto do outro, são facilmente resolvidos com o uso de um depurador. Por que você não usa?
Já desbloqueei o outro tópico.
guj1
ViniGodoy:
Você tem certeza que o dado tem o CPF de um aluno?
Tanto o erro desse tópico, quanto do outro, são facilmente resolvidos com o uso de um depurador. Por que você não usa?
Já desbloqueei o outro tópico.
Obrigado.
Ainda não sei usar um depurador.
Estou estudando o livro do Eclipse. Vou ver logo o capítulo de deputação e também procurar tutoriais na www pra aprender.
Vou tentar resolver com depuração depois que aprender.
Grato!
ViniGodoy
Aprenda o mais rápido possível. Tem vídeos na internet explicando.
Mas basicamente, é assim:
Clique duas vezes na barra lateral branca do lado do código, ao lado da linha que você quer inspecionar. O eclipse colocará lá uma bolinha.
Rode o programa em modo de depuração (o ícone no eclipse é um inseto);
O eclipse irá parar na linha indicada. Você pode colocar o mouse sobre uma variável para ver seu valor. Ou selecionada e pressionar CTRL+SHIFT+I;
Você pode rodar o programa passo-a-passo. Pressione F5 para andar um passo, entrando nos métodos. Ou F6 para andar um passo sem entrar nos métodos.
Observar o programa passo a passo permite que você veja exatamente qual linha não está se comportando como o esperado. Permite que você teste exatamente os valores das variáveis, e confira se elas estão de acordo com o que você imaginava.
É um requisito básico de qualquer programador, inclusive os iniciantes, saber usar o depurador.
E é bem fácil de usa-lo.
guj1
Aprendi a depurar! =)
É e repondendo sua pergunta, o dado está armazenando sim o cpf.
Só que na hora que vai para o sysout(aluno) na view cariables fica assim: coluna name: this, coluna Value: AlunoAcademia(id=21), no outline não aparece nada, e no PrintStream.println(object) line: not avaliable.
Eu acho que ele quer dizer que eu não posso imprimir um objeto por meio do println.
ViniGodoy
Para imprimir um objeto usando print você deve implementar o método toString na classe desse objeto. Por exemplo:
publicclassAluno{//Resto da classe aqui@OverridepublicStringtoString(){returnString.format("Matrícula: %d Nome: %s",matricula,nome);}}