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.