Como saber se um elemento é numérico?

Pessoal,

Tenho que fazer um programa onde leio um vetor de 3 elementos e tenho que ordenar ele em ordem crescente ou decrescente, conforme o usuário escolher.
Quando estou fazendo a leitura do vetor, se insiro um char tenho um retorno de InputMismatchException, onde já resolvi com o try…catch.

[code]import java.util.Scanner;
import java.util.Arrays;
import java.io.*;
import java.util.InputMismatchException;

public class Ordena{

static void le_vetor(int[]vet){
		
	for (int i=0; i<3; i++){
		boolean erro = true;
		while(erro == true){
			try{
				System.out.print("\nDigite o " +(i+1)+" elemento do vetor: ");
				Scanner scan = new Scanner( System.in );  					
				vet[i] = scan.nextInt();
			}
			catch(InputMismatchException ex){
				System.out.print("\nERRO. Entrada invalida.\nDigite o apenas numeros.\n ");
			}
			if (vet[i] != números){
				erro = true;
			}
			else{
				erro = false;
			}
		
		}	
	}
}

static void ordena_vetor_cresc(int[]vet){
	for(int i = 0; i < 3; i++){  
		for(int j = i; j < 3; j++){  
			if(vet[i] > vet[j]){  
				int aux = vet[j];  
				vet[j] = vet[i];  
				vet[i] = aux;  
			}  
		}  
	}  
}

static void ordena_vetor_decresc(int[]vet){
	for(int i = 0; i < 3; i++){  
		for(int j = i; j < 3; j++){  
			if(vet[i] < vet[j]){  
				int aux = vet[j];  
				vet[j] = vet[i];  
				vet[i] = aux;  
			}  
		}  
	}  
}

static void imprime_vetor(int[]vet){
	for (int i=0; i<3; i++){
		System.out.print(vet[i]+" ");		
	}	
}

public static void main(String[] args){
	int[]vet = new int[3];
	boolean erro = true;		
	char escolha = ' ';
	le_vetor(vet);
	while(erro){
		System.out.println("\nPara ordenar o vetor em ordem crescente, digite C\nPara ordenar o vetor em ordem decrescente, digite D");
		try{
			escolha = (char)System.in.read();
		}
		catch(IOException e){
			}
		escolha = Character.toUpperCase(escolha);
		if (escolha == 'C' || escolha == 'D'){
			erro = false;
			if (escolha == 'C'){
				ordena_vetor_cresc(vet);
				imprime_vetor(vet);
			}
			else{
				ordena_vetor_decresc(vet);
				imprime_vetor(vet);
			}
		}
		else{
			System.out.println("\n\nEntrada invalida.");
			System.out.println("Escolha C ou D.\n\n");
		}

	}
}

}
[/code]

Meu problema é na seguinte comparação:

if (vet[i] != números){ erro = true;

Como posso fazer para que eu consiga comparar se o elemento lido pelo teclado é um número e não um caractere aleatório?
Utilizo uma expressão regular? Se sim, como ficaria?

Valeu!

Se você tem um array de inteiros e não foi lançada a InputMismatchException com certeza você tem um valor numérico ali. Não sei se entendi bem o seu problema.

Se a pessoa entra com a letra ‘a’ no vet[0] o try…catch evita que o programa termine, mas, eu preciso que ele informe de novo que o usuário precisa adicionar o vet[0]. Enquanto ele nao informar um valor numerico, bnão é dado o proximo laço do for.

Então, o que acontece é que em java o ‘a’ é um valor que pode ser convertido para número sem problemas. um char pode ser convertido para um int. O que você pode fazer é verificar dessa maneira:Character.isDigit(vet[i])

DEU CERTO MANO!

static void le_vetor(int[]vet){
			
		for (int i=0; i<3; i++){
			boolean erro = true;
			while(erro){
				try{
					System.out.print("\nDigite o " +(i+1)+" elemento do vetor: ");
					Scanner scan = new Scanner( System.in );  					
					vet[i] = scan.nextInt();
					erro = (Character.isDigit(vet[i]));
				}
				catch(InputMismatchException ex){
					System.out.print("\nERRO. Entrada invalida.\nDigite o apenas numeros.\n ");
				}
				

			}
			
		}	
	}

Valeu mesmo!

Só uma dúvida:

Se o caractere pode ser interpretado como um int, qual seria o valor de ‘a’ por exemplo?

public static void main(String[] args) { int a = 'a'; System.out.println(a); // imprime 97 System.out.println((char) a); // imprime 'a' }97 é o valor do caractere ‘a’ na tabela ASCII

Existe algum método que faz essa validação com float?

não tem como um valor que você tipou como int ser um float, ele seria um “float” com 0 após as vírgulas.

Se você tem esses valores no seu programa você tem que repensar essa sua entrada de dados pra ficar com algo mais completo

.

[quote=Rodrigo Sasaki]não tem como um valor que você tipou como int ser um float, ele seria um “float” com 0 após as vírgulas.

Se você tem esses valores no seu programa você tem que repensar essa sua entrada de dados pra ficar com algo mais completo[/quote]

Não, nesse caso seria uma outra verificação. Tenho uma entrada float, mas quero saber se o que foi lido do teclado é um número e não char, para não cair naquela InputMismatchException de novo.
Considere que ao invés de int, meu vetor é um vetor de float agora.

import java.util.Scanner;
import java.util.InputMismatchException;

public class Media{
		
	static void le_notas(float[]notas){
		for (int i=0; i<4; i++){
			boolean erro = true;
			while(erro){
				try{
					System.out.print("\nDigite a " +(i+1)+" nota do aluno: ");
					Scanner scan = new Scanner( System.in );  					
					notas[i] = scan.nextFloat();
					erro = ([Character.isDigit(notas[i]));
				}
				catch(InputMismatchException ex){
					System.out.print("\nERRO. Digite apenas numeros.\n ");
				}
			}
		}	
	}	
		public static void main(String[] args){
			float[]notas = new float[4];
			float media;
			le_notas(notas);
        }
}

No caso, qual método se encaixaria no lugar de Character.isDigit?

Cara, sinceramente eu sugiro que você leia o texto do console como texto mesmo, faça suas validações e depois converta pro tipo específico se quiser. Por exemplo:[code]public static void main(String[] args) {
String str = “14.1”;
float value;
if(isFloat(str)){
value = Float.parseFloat(str);
}

}

private static boolean isFloat(String str){
boolean isFloat;
try {
Float.parseFloat(str);
isFloat = true;
} catch (NumberFormatException e){
isFloat = false;
}
return isFloat;
}[/code]