Jump to content

Detectar Input Inválido


broilas
 Share

Recommended Posts

Boa tarde ,

tenho o seguinte programa:

import java.util.Random;
import java.util.Scanner;
public class JogoAdivinhaNumero
{

 public static void dica(int palpite, int numero, int tentativas)
 {
if(palpite > numero)
{
  System.out.println("Seu palpite é maior que o número sorteado.");
}
else
{
  if(palpite < numero)
  {
	System.out.println("Seu palpite é menor que o número sorteado.");
  }
  else
  {
	System.out.println("Parabéns, você acertou! O número era " + numero);
	System.out.println("Você tentou " + tentativas + " vezes antes de acertar!");
  }
}

 }

 public static void main(String[] args)
 {
int palpite = 0,
	sorteado,
	tentativas = 0;

Scanner entrada = new Scanner(System.in);

Random geradorDeAleatorios = new Random();
sorteado = geradorDeAleatorios.nextInt(100) + 1;
//System.out.println("Sorteado: " + sorteado);
System.out.println("Número entre 1 e 100 sorteado!");

do
{
  System.out.printf("\n-----------------\n");
  System.out.println("Número de tentativas: " + tentativas);

  System.out.print("Qual seu palpite: ");
  palpite = entrada.nextInt();

  tentativas++;

  dica(palpite, sorteado, tentativas);
}while (palpite != sorteado);

 }

}

e queria que no palpite quando metessem uma letra não desse erro , aparece-se uma mensagem a dizer que o palpite não é válido.

Agradeço a ajuda obrigado

Link to comment
Share on other sites

do
{
  System.out.printf("\n-----------------\n");
  System.out.println("Número de tentativas: " + tentativas);
  System.out.print("Qual seu palpite: ");
  try{
  palpite = entrada.nextInt();
tentativas++;
  }catch(InputMismatchException e){
 System.out.println("numero nao valido");
 palpite = -1;
 }
  tentativas++;
  dica(palpite, sorteado, tentativas);
}while (palpite != sorteado);
 }

por exemplo.. assim garantes que mesmo que alguem meta um valor que nao é o esperado ele apanha esse erro, entra no catch e faz essas instruções: avisar que pos um palpite invalido e por um palpite default e retorna ao while...

O bom das excepções é que podes ter quantos catchs quiseres.. ate no futuro, possibilita-te a tratar imensos erros e basta so alterar o que esta dentro do catch para que tipo de eerro apanhar. Claro que podes fazer sempre tu uma excepção personalizada

Edited by carvalho2707
Link to comment
Share on other sites

Sugeria apenas que a chamada à função fosse também colocada no bloco try. Isto porque se a leitura do input falhar, não faz sentido chamar a função.

do
{
   System.out.printf("\n-----------------\n");
   System.out.println("Número de tentativas: " + tentativas);
   System.out.print("Qual seu palpite: ");
   try{
       palpite = entrada.nextInt();
       tentativas++;
       dica(palpite, sorteado, tentativas);
   }catch(InputMismatchException e){
       System.out.println("numero nao valido");
       palpite = -1;
   }
}while (palpite != sorteado);
Link to comment
Share on other sites

Sugeria apenas que a chamada à função fosse também colocada no bloco try. Isto porque se a leitura do input falhar, não faz sentido chamar a função.

do
{
System.out.printf("\n-----------------\n");
System.out.println("Número de tentativas: " + tentativas);
System.out.print("Qual seu palpite: ");
try{
	palpite = entrada.nextInt();
	tentativas++;
	dica(palpite, sorteado, tentativas);
}catch(InputMismatchException e){
	System.out.println("numero nao valido");
	palpite = -1;
}
}while (palpite != sorteado);

tens razão, nem vi essa instrução 😉

Link to comment
Share on other sites

Isso é uma pergunta ou uma afirmação?

Sim é possivel usando os membros hasNextInt(), next() e nextInt() da classe scanner. Mas o tratamento de excepções é algo bastante vulgar neste tipo de linguagens, e facilita bastante o trabalho, além de permitir tratar erros inexperados no programa.

Edited by Flinger
  • Vote 1
Link to comment
Share on other sites

Boas

é possível resolver este problema sem usar gestão de excepção

Obrigado

Caso faças o input para uma String (que come tudo o que metas lá para dentro) e depois validares com uma expressão regular se o conteúdo da String é inteiramente um numero podes então fazer o parse para o que desejas e como excepções como NumberFormatException são Runtime não necessitam de try-catch desde que te certifiques que o parse vai sempre encontrar um numero valido.

The worst part of censorship is ****

Link to comment
Share on other sites

Boa Noite ,

pode aplicar essa parte?

Obrigado

if (str.matches("[a-zA-Z]+$")) {
  // str consists entirely of letters
}

in: http://stackoverflow.com/questions/7939913/validating-string-input-has-no-numbers

Nesse exemplo caso haja letras na string entra dentro do if.

public static boolean containsOnlyNumbers(String str){
for(char ch : str.toCharArray()){
	if(!Character.isDigit(ch)){
		  return false;
	}
}
 return true;
}

Este aqui valida se existe apenas números e devolve false caso tenha letras ou algo do género e assim podes fazer o parseInt() sem necessitar de apanhar uma NumberFormatException

Usar o google não é como o tabaco, não faz mal à saúde.

The worst part of censorship is ****

Link to comment
Share on other sites

eu não sei onde o pessoal anda ler/aprender como trabalhar com Java, no entanto acho estranho que somente uma pessoa tenho referido a solução correcta de abordar o problema sem o uso do controlo de excepções (@Flinger), sendo a sugestão completamente ignorada por todos que participaram no tópico ...

boolean nasNext<TIPO>(); // <TIPO> é o tipo de dados que se pretende verificar

basta usar esse tipo de funções para criar código sem a necessidade de try/catch's

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.