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.
