Nossa... foi mal denovo, eu tinha colocado um teste e esqueci de tirar, daí ele "aceitava" porque o teste estava sempre usando o método na posicao 0, e depois vinha a exception porque nao tinha achado o joao, só existia joaozinho. Não sei se consegui explicar direito.
Sobre o lugar/pessoa, foi má escolha no nome da variável mesmo, eu queria retornar o ponteiro da pessoa, mas puz nome lugar. Vou procurar saber sobre hashs, etc, mas a dúvida fica agora só mesmo numa melhor implementação da busca. Em 10 de abril de 2011 12:25, Peter P. Lupo <[email protected]> escreveu: > Se vc quer que Joaozinho seja retornado quando vc procura por Joao, deveria > usar o startsWith e não o equals. > Se vc usa o equals, não retorna o Joaozinho, retorna null mesmo. Mais um > indício de que a implementação está correta e o erro está depois. > > Abraço > > Peter P. Lupo > http://craftnicely.blogspot.com - http://sites.google.com/site/pplupo > <http://sites.google.com/site/pplupo>MPS.BR Authorized Implementation > Practitioner<http://www.softex.br/mpsbr/_profissionais/MPS.BR_certificados_de_arovacao_prova_P2-MPS.BR.pdf>- > Certified > ScrumMaster <http://www.scrumalliance.org/pages/certified_scrummaster> > <http://www.scrumalliance.org/pages/certified_scrummaster>Oracle > Certified Associate, Java SE 5/SE > 6<http://in.sun.com/training/certification/java/scja.xml> - > Java Black Belt <http://www.blackbeltfactory.com/ui#!User/pplupo> > <http://www.blackbeltfactory.com/ui#!User/pplupo>+55 (021) 81742487 > > > > 2011/4/10 Peter P. Lupo <[email protected]> > > Bom, vc não está retornando o lugar, está retornando a pessoa. :-) >> >> Mas eu não acredito que a exceção seja dentro deste método. Provavelmente >> quando não acha ele retorna null e quando vc tenta fazer algo com o retorno >> dá NullPointerException, não? >> >> Não estou vendo nada errado com o método. >> >> Até pq, se retorna o lugar e depois dá o erro, o método já foi terminado >> (termina quando retorna), logo o erro é depois do método e não nele. >> >> Abraço >> >> Peter P. Lupo >> http://craftnicely.blogspot.com - http://sites.google.com/site/pplupo >> <http://sites.google.com/site/pplupo>MPS.BR Authorized Implementation >> Practitioner<http://www.softex.br/mpsbr/_profissionais/MPS.BR_certificados_de_arovacao_prova_P2-MPS.BR.pdf>- >> Certified >> ScrumMaster <http://www.scrumalliance.org/pages/certified_scrummaster> >> <http://www.scrumalliance.org/pages/certified_scrummaster>Oracle >> Certified Associate, Java SE 5/SE >> 6<http://in.sun.com/training/certification/java/scja.xml> - >> Java Black Belt <http://www.blackbeltfactory.com/ui#!User/pplupo> >> <http://www.blackbeltfactory.com/ui#!User/pplupo>+55 (021) 81742487 >> >> >> >> 2011/4/10 Lucian Sturião <[email protected]> >> >>> public static Pessoa procurarPessoa (String nome, ArrayList<Pessoa> >>> lista) { >>> Pessoa lugar = null; >>> for (int i = 0; i < lista.size(); i ++) >>> { >>> if (nome.equalsIgnoreCase(lista.get(i).getNome())) { >>> lugar = lista.get(i); >>> break; >>> } >>> } >>> return lugar; >>> } >>> >>> Se o nome da pessoa é joaozinho por exemplo, e eu procuro por joao, o >>> método retorna o lugar do joaozinho e dá uma exception. >>> >>> Em 10 de abril de 2011 12:02, Peter P. Lupo <[email protected]> escreveu: >>> >>> Como vc fez? >>>> >>>> Não é pra usar no if dentro do for, é pra usar em substituição ao for, >>>> comparando os nomes diretamente e não seus caracteres. >>>> >>>> Abraço >>>> >>>> >>>> Peter P. Lupo >>>> http://craftnicely.blogspot.com - http://sites.google.com/site/pplupo >>>> <http://sites.google.com/site/pplupo>MPS.BR Authorized Implementation >>>> Practitioner<http://www.softex.br/mpsbr/_profissionais/MPS.BR_certificados_de_arovacao_prova_P2-MPS.BR.pdf>- >>>> Certified >>>> ScrumMaster <http://www.scrumalliance.org/pages/certified_scrummaster> >>>> <http://www.scrumalliance.org/pages/certified_scrummaster>Oracle >>>> Certified Associate, Java SE 5/SE >>>> 6<http://in.sun.com/training/certification/java/scja.xml> - >>>> Java Black Belt <http://www.blackbeltfactory.com/ui#!User/pplupo> >>>> <http://www.blackbeltfactory.com/ui#!User/pplupo>+55 (021) 81742487 >>>> >>>> >>>> >>>> 2011/4/10 Lucian Sturião <[email protected]> >>>> >>>>> É que eu estava usando o equalsIgnoreCase (dica de outra lista) e mesmo >>>>> assim deu a Exception quando o nome do objeto era maior que o nome >>>>> procurado. >>>>> >>>>> Em 10 de abril de 2011 11:43, Peter P. Lupo <[email protected]>escreveu: >>>>> >>>>> Depende. Se cada caractere for instância de Character, é um objeto. Se >>>>>> for simplesmente um valor tipo char, é um tipo primitivo. Assim vc tb vai >>>>>> encontrar Integer/int, Double/double, Float/float, Boolean/boolean, >>>>>> etc... >>>>>> Neste caso aí, cada caractere é um char mesmo, eu acho. Me equivoquei >>>>>> no primeiro exemplo. >>>>>> >>>>>> Sim, comparando os tamanhos vc se livra do problema mas vc tb pode >>>>>> simplesmente usar equals ou equalsIgnoreCase de String para comparar os >>>>>> nomes, sem ter que implementar o for vc mesmo. >>>>>> >>>>>> Assim fica mais claro o que vc está querendo fazer além de vc não >>>>>> perder tempo fazendo algo com bugs que já existe feito e testado. >>>>>> >>>>>> Abraço >>>>>> >>>>>> Peter P. Lupo >>>>>> http://craftnicely.blogspot.com - http://sites.google.com/site/pplupo >>>>>> <http://sites.google.com/site/pplupo>MPS.BR Authorized >>>>>> Implementation >>>>>> Practitioner<http://www.softex.br/mpsbr/_profissionais/MPS.BR_certificados_de_arovacao_prova_P2-MPS.BR.pdf>- >>>>>> Certified >>>>>> ScrumMaster<http://www.scrumalliance.org/pages/certified_scrummaster> >>>>>> <http://www.scrumalliance.org/pages/certified_scrummaster>Oracle >>>>>> Certified Associate, Java SE 5/SE >>>>>> 6<http://in.sun.com/training/certification/java/scja.xml> - >>>>>> Java Black Belt <http://www.blackbeltfactory.com/ui#!User/pplupo> >>>>>> <http://www.blackbeltfactory.com/ui#!User/pplupo>+55 (021) 81742487 >>>>>> >>>>>> >>>>>> >>>>>> 2011/4/10 Lucian Sturião <[email protected]> >>>>>> >>>>>>> Cada caractere também é um objeto? >>>>>>> Então será que usando já uma condição pra comparar o tamanho dos >>>>>>> nomes logo no começo contornaria essa exceção? >>>>>>> >>>>>>> Em 10 de abril de 2011 11:00, Peter P. Lupo <[email protected]>escreveu: >>>>>>> >>>>>>> Sim, isto deve resolver, mas há diversas soluções: >>>>>>>> >>>>>>>> >>>>>>>> public boolean equalsNome (String nome) { >>>>>>>> for (int i = 0; i < this.nome.length(); i++) { >>>>>>>> if (this.nome.charAt(i)*.equals(*nome.charAt(i))*)* return true; >>>>>>>> } >>>>>>>> return false; >>>>>>>> } >>>>>>>> >>>>>>>> SEMPRE que você quiser saber se dois objetos são de valores iguais, >>>>>>>> chame o equals. == ou != só serve para dizer se são o mesmo objeto (se >>>>>>>> estão >>>>>>>> na mesma posição de memória) e não para dizer se são iguais (podem ser >>>>>>>> dois >>>>>>>> objetos distintos, mas iguais em valor). Isso é matéria e pode cair em >>>>>>>> prova. Se não entendeu com esta explicação de uma linha e meia, >>>>>>>> pergunte. >>>>>>>> >>>>>>>> Se você implementar a sugestão do Thiago, vc pode usar o contains no >>>>>>>> lugar do seu método equalsNome: >>>>>>>> >>>>>>>> todasPessoas.contains(pessoa) >>>>>>>> ou >>>>>>>> todasPessoas.contains(new Pessoa(nome)) >>>>>>>> >>>>>>>> e já saberá se existe ou não uma pessoa com aquele nome. >>>>>>>> >>>>>>>> Leia o Javadoc dos métodos equals e hashCode em Object. Se vc mudar >>>>>>>> um, terá que mudar o outro. Se dois objetos forem iguais segundo o >>>>>>>> equals, >>>>>>>> eles devem retornar o mesmo hashCode. Vc tb tem a opção de clicar com o >>>>>>>> botão direito no código de Pessoa, ir no menu source e selecionar >>>>>>>> generate >>>>>>>> equals and hashcode. O Eclipse faz pra vc. Mas não deixe de ler. É >>>>>>>> matéria e >>>>>>>> pode cair em prova. >>>>>>>> >>>>>>>> Para saber se existe uma pessoa com aquele nome na coleção: >>>>>>>> >>>>>>>> public boolean equalsNome (String nome) { >>>>>>>> for (Pessoa p : todasPessoas) { >>>>>>>> if (p.getNome.equals(nome)) return true; >>>>>>>> } >>>>>>>> return false; >>>>>>>> } >>>>>>>> >>>>>>>> Em String há os métodos equals e equalsIgnoreCase para vc não ter >>>>>>>> que fazer este for que vc fez. >>>>>>>> E seu método tem outro problema. Sempre que this.nome for mais longo >>>>>>>> que nome, vc vai ter uma exceção. >>>>>>>> >>>>>>>> >>>>>>>> Abraço >>>>>>>> >>>>>>>> >>>>>>>> Peter P. Lupo >>>>>>>> http://craftnicely.blogspot.com - >>>>>>>> http://sites.google.com/site/pplupo >>>>>>>> <http://sites.google.com/site/pplupo>MPS.BR Authorized >>>>>>>> Implementation >>>>>>>> Practitioner<http://www.softex.br/mpsbr/_profissionais/MPS.BR_certificados_de_arovacao_prova_P2-MPS.BR.pdf>- >>>>>>>> Certified >>>>>>>> ScrumMaster<http://www.scrumalliance.org/pages/certified_scrummaster> >>>>>>>> <http://www.scrumalliance.org/pages/certified_scrummaster>Oracle >>>>>>>> Certified Associate, Java SE 5/SE >>>>>>>> 6<http://in.sun.com/training/certification/java/scja.xml> - >>>>>>>> Java Black Belt <http://www.blackbeltfactory.com/ui#!User/pplupo> >>>>>>>> <http://www.blackbeltfactory.com/ui#!User/pplupo>+55 (021) >>>>>>>> 81742487 >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> 2011/4/10 Thiago Caldeira de Lima <[email protected]> >>>>>>>> >>>>>>>>> Vc pode usar " ob.equals(ob2) ", talvez precise fazer um override >>>>>>>>> do método equals da classe Pessoa. >>>>>>>>> >>>>>>>>> public boolean equals(pessoa p){ >>>>>>>>> >>>>>>>>> return this.nome.equals(p.nome); >>>>>>>>> } >>>>>>>>> >>>>>>>>> isso deve resolver =] >>>>>>>>> >>>>>>>>> public boolean equals(Object obj) { >>>>>>>>> >>>>>>>>> >>>>>>>>> 2011/4/10 Lucian Sturião <[email protected]> >>>>>>>>> >>>>>>>>>> Estou tentando fazer um programa de cadastro de pessoas em Java. >>>>>>>>>> No meu programa cada pessoa teria: nome, reserva, pagamentos 1 2 e >>>>>>>>>> 3, e mais >>>>>>>>>> alguns métodos/atributos. >>>>>>>>>> Eu acho que consegui fazer uma Arraylist com esses objetos, não >>>>>>>>>> sei se fiz certo: >>>>>>>>>> >>>>>>>>>> Declarei: >>>>>>>>>> >>>>>>>>>> ArrayList<Pessoa> todasPessoas = new ArrayList<Pessoa>(); >>>>>>>>>> >>>>>>>>>> e depois quando adiciono a pessoa, faço: >>>>>>>>>> >>>>>>>>>> todasPessoas.add(new Pessoa("nome")); >>>>>>>>>> >>>>>>>>>> Quando quero procurar uma pessoa da arraylist, eu fiz um método >>>>>>>>>> que usa um for e procura em todos objetos da arraylist pelo nome >>>>>>>>>> dado, >>>>>>>>>> usando o método equalsNome (abaixo)... mas isso está me parecendo >>>>>>>>>> muito >>>>>>>>>> estranho, e não está dando certo. >>>>>>>>>> Fiz um método equalsNome na Classe Pessoa, pra receber um nome e >>>>>>>>>> dizer se este é o nome da pessoa: >>>>>>>>>> >>>>>>>>>> public boolean equalsNome (String nome) { >>>>>>>>>> for (int i = 0; i < this.nome.length(); i++) { >>>>>>>>>> if (this.nome.charAt(i) != nome.charAt(i)) return false; >>>>>>>>>> } >>>>>>>>>> return false; >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Alguém pode me ajudar? Procurei na Classe ArrayList na API e não >>>>>>>>>> encontrei o que eu queria. >>>>>>>>>> O que estou fazendo errado, e tem algum jeito de fazer isso mais >>>>>>>>>> simples? >>>>>>>>>> >>>>>>>>>> Obrigado. >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> You received this message because you are subscribed to the Google >>>>>>>>>> Groups "Comp 2 - Geral" group. >>>>>>>>>> To post to this group, send email to [email protected] >>>>>>>>>> . >>>>>>>>>> To unsubscribe from this group, send email to >>>>>>>>>> [email protected]. >>>>>>>>>> For more options, visit this group at >>>>>>>>>> http://groups.google.com/group/comp2-geral?hl=en. >>>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> You received this message because you are subscribed to the Google >>>>>>>>> Groups "Comp 2 - Geral" group. >>>>>>>>> To post to this group, send email to [email protected]. >>>>>>>>> To unsubscribe from this group, send email to >>>>>>>>> [email protected]. >>>>>>>>> For more options, visit this group at >>>>>>>>> http://groups.google.com/group/comp2-geral?hl=en. >>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> You received this message because you are subscribed to the Google >>>>>>>> Groups "Comp 2 - Geral" group. >>>>>>>> To post to this group, send email to [email protected]. >>>>>>>> To unsubscribe from this group, send email to >>>>>>>> [email protected]. >>>>>>>> For more options, visit this group at >>>>>>>> http://groups.google.com/group/comp2-geral?hl=en. >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "Comp 2 - Geral" group. >>>>>>> To post to this group, send email to [email protected]. >>>>>>> To unsubscribe from this group, send email to >>>>>>> [email protected]. >>>>>>> For more options, visit this group at >>>>>>> http://groups.google.com/group/comp2-geral?hl=en. >>>>>>> >>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "Comp 2 - Geral" group. >>>>>> To post to this group, send email to [email protected]. >>>>>> To unsubscribe from this group, send email to >>>>>> [email protected]. >>>>>> For more options, visit this group at >>>>>> http://groups.google.com/group/comp2-geral?hl=en. >>>>>> >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Comp 2 - Geral" group. >>>>> To post to this group, send email to [email protected]. >>>>> To unsubscribe from this group, send email to >>>>> [email protected]. >>>>> For more options, visit this group at >>>>> http://groups.google.com/group/comp2-geral?hl=en. >>>>> >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Comp 2 - Geral" group. >>>> To post to this group, send email to [email protected]. >>>> To unsubscribe from this group, send email to >>>> [email protected]. >>>> For more options, visit this group at >>>> http://groups.google.com/group/comp2-geral?hl=en. >>>> >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "Comp 2 - Geral" group. >>> To post to this group, send email to [email protected]. >>> To unsubscribe from this group, send email to >>> [email protected]. >>> For more options, visit this group at >>> http://groups.google.com/group/comp2-geral?hl=en. >>> >> >> > -- > You received this message because you are subscribed to the Google Groups > "Comp 2 - Geral" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/comp2-geral?hl=en. > -- You received this message because you are subscribed to the Google Groups "Comp 2 - Geral" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/comp2-geral?hl=en.
