Sei lá....rsrs

Uma solução rápida é você testar se o índice passado é <= que o tamanho do
array.

Exemplo:

Tamanho 2 - entrada 3
Nesse caso, você não tenta acessar porque a posição não existe....

Mas algo me diz que você está fazendo seu programa de maneira errada, meio
confuso, mas às 3:20 da manhã é meio difícil criticar....hehe

BTW, baixa a aula de debug. Melhor coisa que você faz por agora. Teria
achado o erro de maneira bem mais rápida.

[]'s

2011/4/29 Fellipe Sombra <[email protected]>

> É parece q tem erro nesse if mesmo como você falou estou tentando acessar
> uma posição que não existe
>
> quando eu botei ele comentado eu consegui entrar no else do Sair.
>
> //if(checaItem(itensLoja.get(entrada-1).getNome(),"arma")){
> // comprarItem(personagem,item(itensLoja.get(entrada-1).getNome()));
>  //}
>
>
> Como eu faço para obter o resultado que eu estou querendo entao com aquele
> if sem dar esse erro?
>
> Eu quero que ele cheque se existe aquele item. Essa função checaItem
> retorna true or false, mas pelo visto quando ele tenta checar essa posição
> que não existe da erro. Como posso contornar isso ?
>
> ---
>
> e valeu Julio mas ainda não sei como usar essas exceptions ai não, por
> enquanto deixa assim mesmo.
>
> 2011/4/29 Zaedy Sayão <[email protected]>
>
>> Sim, eu falei isso hoje na monitoria.
>>
>> É que eles ainda não viram exceção, por isso ele colocou assim. Quando
>> entender bem a hierarquia delas, não fará mais assim (eu espero).
>> Lembrando que Exception deve ser sempre a última a ser tratada, porque é a
>> classe mais alta.
>>
>> []'s
>>
>>
>> 2011/4/29 Júlio Zynger <[email protected]>
>>
>>> Não sou monitor da matéria e provavelmente não vai te ajudar nesse
>>> problema, mas posso dar uma dica? Sempre que fizer um catch, procura usar a
>>> Exception que você espera receber no caso de um erro. Existem algumas
>>> situações em que mais de uma exception pode aparecer potencialmente. Se você
>>> faz catch(Exception e), trata as duas com um mesmo bloco de código, quando
>>> na realidade o certo é tratar cada uma de uma forma diferente, dependendo da
>>> Exception.
>>>
>>> Por exemplo:
>>>
>>>
>>>> try{
>>>>   trecho de codigo
>>>> }catch(NullPointerException npe){
>>>>   trata o primeiro tipo
>>>> }catch(IndexOutOfBoundsException npe){
>>>>   trata o segundo tipo
>>>> }
>>>> segue o código
>>>
>>>
>>> Fica a dica :)
>>>
>>> Em 29 de abril de 2011 02:57, Zaedy Sayão <[email protected]>escreveu:
>>>
>>> Agora que li tudo (ainda não sei o motivo do erro), vou aproveitar pra
>>>> falar uma coisa que vi que entendeu errado.
>>>>
>>>> Quando um código dá uma exceção (lança, como dizemos), ele vai pro catch
>>>> imediatamente. Então, se a linha 20 lança uma exceção, a linha 21 não vai
>>>> ser executada.
>>>>
>>>> O resto a ser executado será o código depois do catch.
>>>>
>>>> Isso responde porque não está entrando no else, agora o motivo do erro
>>>> ainda não sei.
>>>>
>>>> []'s
>>>>
>>>> 2011/4/29 Fellipe Sombra <[email protected]>
>>>>
>>>>> Bom, eu já estava usando o try/catch em algumas ocasiões para verificar
>>>>> se a entrada era um inteiro e não uma string.
>>>>>
>>>>> Mas agora que estou "melhorando" minha loja, botando para todas as
>>>>> opções serem acessadas por números e não strings eu me deparei com 2
>>>>> situações que eu não estou entendendo porque está entrando no catch.
>>>>>
>>>>> Nessas 2 funções( comprarArma() e vender() ):
>>>>>
>>>>> public void comprarArma(Personagem personagem){
>>>>> boolean inArmas = true;
>>>>>  int entrada;
>>>>> while(inArmas){
>>>>> System.out.println("Temos as seguintes armas:");
>>>>>  mostraArmas();
>>>>> System.out.println("Seu dinheiro: "+personagem.getDinheiro()+"
>>>>> dolares");
>>>>>  try{
>>>>> entrada = scanner.nextInt();
>>>>> if(checaItem(itensLoja.get(entrada-1).getNome(),"arma")){
>>>>>  comprarItem(personagem,item(itensLoja.get(entrada-1).getNome()));
>>>>> }
>>>>>  else if(entrada == (itensLoja.size()+1)){
>>>>> inArmas = false;
>>>>> }
>>>>>  else{
>>>>> System.out.println("Comando Inválido else inArmas");
>>>>>  }
>>>>> }catch (Exception e) {
>>>>> System.out.println("Comando Inválido catch inArmas.");
>>>>>  }
>>>>> }
>>>>> }
>>>>>   public void vender(Personagem personagem){
>>>>>  boolean inVender = true;
>>>>> int entrada;
>>>>> while(inVender){
>>>>>  System.out.println("O que você deseja vender?");
>>>>> mochilaVenda(personagem);
>>>>>  System.out.println("Seu dinheiro: "+personagem.getDinheiro()+"
>>>>> dolares");
>>>>> try{
>>>>>  entrada = scanner.nextInt();
>>>>>
>>>>> if(checaItemVenda(personagem.itensP.get(entrada-1).getNome(),personagem)){
>>>>>
>>>>> venderItem(personagem,item(personagem.itensP.get(entrada-1).getNome()),item(itensLoja.get(entrada-1).getNome()));
>>>>> }
>>>>>  else if(entrada == (mostrouImochila+1)){
>>>>> inVender = false;
>>>>> }
>>>>>  else{
>>>>> System.out.println("Comando Inválido else inVender");
>>>>>  }
>>>>> }catch(Exception e){
>>>>> System.out.println("Comando Inválido catch inVender");
>>>>>  }
>>>>> }
>>>>> }
>>>>>
>>>>> Vou dar situações como exemplo para vocês entenderem o que acontece:
>>>>>
>>>>> situação exemplo comprarArmas():
>>>>>
>>>>> Temos as seguintes armas:
>>>>> 1 - Espada Enferrujada(x6) - 50 dolares
>>>>> 2 - Espada de Metal(x3) - 150 dolares
>>>>> 3 - Sair
>>>>> Seu dinheiro: 200 dolares
>>>>> 1
>>>>> Digite a quantidade de Espada Enferrujada que você deseja
>>>>> 2
>>>>> Você comprou 2 Espada Enferrujada e gastou 100 dolares
>>>>> Temos as seguintes armas:
>>>>> 1 - Espada Enferrujada(x4) - 50 dolares
>>>>> 2 - Espada de Metal(x3) - 150 dolares
>>>>> 3 - Sair
>>>>> Seu dinheiro: 100 dolares
>>>>> 3
>>>>> Comando Inválido catch inArmas.
>>>>> Temos as seguintes armas:
>>>>> 1 - Espada Enferrujada(x4) - 50 dolares
>>>>> 2 - Espada de Metal(x3) - 150 dolares
>>>>> 3 - Sair
>>>>> Seu dinheiro: 100 dolares
>>>>>
>>>>> Quando digito o valor correspondente a uma opção que seja um item ele
>>>>> funciona, porém quando digito a opção correspondente ao Sair ele entra no
>>>>> catch... assim como qualquer outro número que não seja a opção de um 
>>>>> númore.
>>>>> Por exmeplo 4,5,6... qualquer um desses entram no catch, quando deveriam
>>>>> entrar no 'else'.
>>>>>
>>>>> Eu ja até tentei botar :
>>>>>
>>>>> else if(entrada == (3){
>>>>> inArmas = false;
>>>>> }
>>>>>
>>>>> Só para testar se assim funcionava, mas mesmo assim entrou no catch
>>>>> quando eu digitei 3.
>>>>>
>>>>> No vender() Acontece a mesma situação , não consigo acessar o Sair
>>>>> também.
>>>>>
>>>>> Não sei o que estou fazendo de errado. Se alguém puder ajudar fico
>>>>> grato.
>>>>>
>>>>>
>>>>>  --
>>>>> 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.
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Zaedy Dantas Sayão
>>>> Graduando em Ciência da Computação DCC/UFRJ
>>>> http://www.manufato.com.br/
>>>> MSN: [email protected]
>>>>
>>>> --
>>>> 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.
>>>>
>>>
>>>
>>>
>>> --
>>> [image: JulioZynger]Júlio Zynger
>>> Site pessoal: http://dcc.ufrj.br/~julioz
>>> Twitter: @juliozynger
>>>
>>>  --
>>> 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.
>>>
>>
>>
>>
>> --
>> Zaedy Dantas Sayão
>> Graduando em Ciência da Computação DCC/UFRJ
>> http://www.manufato.com.br/
>> MSN: [email protected]
>>
>> --
>> 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.
>



-- 
Zaedy Dantas Sayão
Graduando em Ciência da Computação DCC/UFRJ
http://www.manufato.com.br/
MSN: [email protected]

-- 
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