Não permitir inserção de letras em JAVA

luismca

Power Member
Boa noite pessoal

Como fazer para não permitir (modo consola) o utilizador inserir letras, só digitos.
Alguém sabe, agradeço a quem souber, é urgente.


Cumprimentos e obrigado desde já
 
Estava aqui a magicar, mas a esta hora ja não sai grande coisa.

Código:
package exp_zwame;

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
       
        Scanner ler=new Scanner(System.in);
        int val,i;
        boolean teste=false;        
        int[]v=new int[10];
        
        do{System.out.println("Insira um valor numérico: ");
        
        val=ler.nextInt();
        int tmp;

        
        for(i=0;i>11;i++){
            
        v[i]=i;
                  
        if(val!=v[i]){
        
            teste=true;
        }
        }
        }while(teste=true);
        

}

}

Este código tem um problema:

1 - Caso o utilizador insira um valor não numérico isto crasha lol


Desculpa lá que não estou com paciencia, mas faz tu isto:

O valor que o utilizador vai dar, em vez de ser lido como integer, é lido como string ou char. E depois dentro do for, convertes o i para string ou char (penso que dá, não sei se através do parse ou de outra forma) e comparas. Caso o valor seja diferente de todos os i's percorridos no for, o programa tem que voltar a pedir o valor. Caso seja igual, segue. :)

Espero ter ajudado.
 
não basta deixar o utilizador inserir um numero não determinado de caracteres e vereficar depois se pode ser interpretado como double, int, float, string, etc, so não der como floar, int ou double pede pra inserir de novo?

podes usar o hasNext(tipo) do Scanner
 
Estava aqui a magicar, mas a esta hora ja não sai grande coisa.

Código:
package exp_zwame;

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
       
        Scanner ler=new Scanner(System.in);
        int val,i;
        boolean teste=false;        
        int[]v=new int[10];
        
        do{System.out.println("Insira um valor numérico: ");
        
        val=ler.nextInt();
        int tmp;

        
        for(i=0;i>11;i++){
            
        v[i]=i;
                  
        if(val!=v[i]){
        
            teste=true;
        }
        }
        }while(teste=true);
        

}

}
Este código tem um problema:

1 - Caso o utilizador insira um valor não numérico isto crasha lol


Desculpa lá que não estou com paciencia, mas faz tu isto:

O valor que o utilizador vai dar, em vez de ser lido como integer, é lido como string ou char. E depois dentro do for, convertes o i para string ou char (penso que dá, não sei se através do parse ou de outra forma) e comparas. Caso o valor seja diferente de todos os i's percorridos no for, o programa tem que voltar a pedir o valor. Caso seja igual, segue. :)

Espero ter ajudado.
Isso resolve-se com um try/catch, ou não?

O problema é se o utilizador mete um numero não inteiro... Não seria melhor usar o nextDouble em vez do nextInt?
 
Tens de usar a InputMismatchException do Scanner:

Código:
import java.util.*;

public class Main {
     public static int lerInt() {
     Scanner input = new Scanner(System.in);
     boolean ok = false; 
     int i = 0; 
     while(!ok) {
         try {
             i = input.nextInt();
             ok = true;
         }
         catch(InputMismatchException e) 
             { System.out.println("Inteiro Inválido"); 
               System.out.print("Novo valor: ");
               input.nextLine(); 
             }
     }
     input.close();
     return i;
  } 
  
    public static void main(String[] args) {
        System.out.println("Insira um digito: ");
        int x = lerInt();
        System.out.println(x);
    }
}
 
O problema é que o programa já tá todo feito, estava à espera de fazer isso com try catch, não existe nenhuma excepção para lidar com isso?
 
O problema é que o programa já tá todo feito, estava à espera de fazer isso com try catch, não existe nenhuma excepção para lidar com isso?

os digitos em cada ocorrencia de imput so podem vir no formato double, int, float ou outro? ha um formato defenido em cada imput? se for so um tipo restringe

tive a ver o manual do scanner e no scanner ha o findinline onde lhe passas uma Pattern

nas paterns tem
\d A digit: [0-9]
X* X, zero or more times
X+ X, one or more times
x The character x

assumo que dê pra fazer um fsm que trate de inteiros e decimais
 
Back
Topo