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.

Responder a