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.
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.
public class Message {
public void showMsg(String msgStr){
System.out.println(msgStr);
}
}
No arquivo Player.java vamos deixar assim.
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:
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.
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
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