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.

Responder a