O bloco try-catch é conveniente e fácil de ser usado. Contudo, algumas vezes não podemos dar aos programadores uma clara indicação do motivo da exceção.
Por exemplo, o FileNotFoundException apenas nos diz “file not found” mas não indica a causa do problema, tais como o caminho está errado, ou o arquivo não existe ou algo do tipo.
Similarmente, o NumberFormatException apenas nos diz que o formato inserido é errado, mas não nos diz a causa da exceção para o jogador corrigir a sua entrada de dados.
Esse ponto fraco, faz nós programadores criar a nossa própria rotina para capturar a causa. O método isInteger(inputStr) é parecido com um try.
Anteriormente utilizamos o método isQualifiedData com o bloco try-catch para verificar a validade da entrada de dados. Não iremos mais utilizar esse método e sim criar a nossa própria rotina para verificar a entrada de dados.
Crie um arquivo chamado Number.java.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class Number { public boolean isInRange(int guessedInt) { if((guessedInt >= 1) && (guessedInt <= 100)){ return true; }else{ showMsg("Digite apenas números entre 0 e 101.\n" +"Tente novamente."); return false; } } } |
Crie um arquivo chamado Message.java.
1 2 3 4 5 6 7 8 |
public class Message { public void showMsg(String msgStr){ System.out.println(msgStr); } } |
No arquivo Player.java vamos deixar assim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import javax.swing.JOptionPane; public class Player{ private String guessedIntStr; private int guessedInt; public Player(){} public int playingGame(){ boolean qualified = false; while(!qualified) { guessedIntStr = JOptionPane.showInputDialog("Digite um número entre 1 e 100"); guessedInt = Integer.parseInt(guessedIntStr); Number n = new Number(); qualified = n.isInRange(guessedInt); } Message m = new Message(); m.showMsg("Jogador: Meu palpite é " +guessedInt); return guessedInt; } |
Quando eu digitar um número menor que 1 e maior que 100 a mensagem: Digite apenas números entre 0 e 101, irá aparecer.
No arquivo Player.java no método playingGame() deixe desta maneira:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public int playingGame(){ boolean qualified = false; while(!qualified) { try{ guessedIntStr = JOptionPane.showInputDialog("Digite um número entre 1 e 100"); guessedInt = Integer.parseInt(guessedIntStr); Number n = new Number(); qualified = n.isInRange(guessedInt); }catch(NumberFormatException ex){ Message m = new Message(); if(guessedIntStr == null){ m.showMsg("você pressionou o botão Cancelar ou fechou o programa.\n" +"O programa foi fechado.\n"); System.exit(0); }else if(guessedIntStr.equals("")){ m.showMsg("Você clicou no botão OK.\n" +"Nenhum dado foi inserido.\nDigite novamente.\n"); } } } Message m = new Message(); m.showMsg("Jogador: Meu palpite é " +guessedInt); return guessedInt; } |
Nesse passo tratamos a situação de o jogador clicar no botão OK ou Cancelar e não ter digitado nenhum dado de entrada.
Se o jogador digitar uma letra ao invés de um número o programa não mostra nenhum tipo de erro, mas vamos tratar essa situação mesmo assim.
Adicione o método justNumbers no arquivo Number.java.
1 2 3 4 5 6 7 8 9 10 11 12 |
public boolean justNumbers(String guessedIntStr){ Message m = new Message(); for(int digit = 0; digit < guessedIntStr.length(); digit++){ char c = guessedIntStr.charAt(digit); if(c < '0' || c > '9'){ m.showMsg("Digite apenas números.\n" +"Tente novamente.\n"); return false; } } return true; } |
Player.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
import javax.swing.JOptionPane; public class Player{ private String guessedIntStr; private int guessedInt; public Player(){} public int playingGame(){ boolean qualified = false; while(!qualified) { try{ guessedIntStr = JOptionPane.showInputDialog("Digite um número entre 1 e 100"); Number n = new Number(); guessedInt = Integer.parseInt(guessedIntStr); qualified = n.isInRange(guessedInt); }catch(NumberFormatException ex){ Message m = new Message(); Number n = new Number(); if(guessedIntStr == null){ m.showMsg("você pressionou o botão Cancelar ou fechou o programa.\n" +"O programa foi fechado.\n"); System.exit(0); }else if(guessedIntStr.equals("")){ m.showMsg("Você clicou no botão OK.\n" +"Nenhum dado foi inserido.\nDigite novamente.\n"); } n.justNumbers(guessedIntStr); } } Message m = new Message(); m.showMsg("Jogador: Meu palpite é " +guessedInt); return guessedInt; } } |
O programa agora verifica se o número digitado está entre o pedido, se só há números no que foi digitado e o programa identifica quando o jogador deixa o campo vazio e clica nos botões cancelar ou ok.
Fonte: Learning Java with Games
Deixe um comentário