Java - validar números en java

 
Vista:
sin imagen de perfil
Val: 25
Ha aumentado su posición en 1146 puestos en Java (en relación al último mes)
Gráfica de Java

validar números en java

Publicado por Andre (15 intervenciones) el 19/05/2021 21:04:16
tengo este código necesito que cuando se ingresen letras en vez de números me de un mensaje "Ingrese solo números" y me vuelva a preguntar para ingresar correctamente los datos



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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package week5;
import java.util.Scanner;
 
import javax.swing.text.NumberFormatter;
public class ImprovedInterest {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
 
 
		String entradaTeclado ="";
 
		do {
 
			String cadena="";
			double importe=0,interes=0,interm=0,importes = 0,finali=0;
			int mes,mess;
			Scanner scanner =new Scanner(System.in);
 
		System.out.println("Ingrese la cantidad a depositar cada mes ");
		importe=scanner.nextDouble();
 
 
System.out.println("Ingrese la tasa de interes anual ");
interes=scanner.nextDouble();
 
 
 
 
 
		System.out.println("Ingrese la cantidad de meses que planea ahorrar");
		mes=scanner.nextInt();
 
  for(int i=1;i<=mes;i++)
  {
 
if(i>=1){
	importes=importe+importes;
 
 
	  interm= (interes/100/mes);
 
	 finali=importes*(1+interm);
 
	 System.out.println("  mes :  "+i+"  saldo: " + finali );
	if(i==mes) {
		  System.out.println("Desea Continuar");
		  Scanner scanner1 =new Scanner(System.in);
		  entradaTeclado = scanner1.nextLine ();
 
	}//if
 
	else if(entradaTeclado.equals("n")) {
		 System.exit(0);
	  }//else
}//if mayor
 
 
}//for
 
	}//do
 
 
  while( entradaTeclado.equals("y"));
 
	}//fin1
 
  	}//fin2
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

validar números en java

Publicado por Kabuto (1381 intervenciones) el 20/05/2021 01:51:34
Hola.

Puedes usar métodos que se encarguen específicamente de pedir valores numéricos, uno para pedir int y otro para pedir double.

Dentro de estos métodos, con Scanner pides el dato recogiéndolo como un String con nextLine() e intentar parsearlo a int o a double, según corresponda.

Si el parseo falla, porque se han metido letras o caracteres raros, se producirá una excepción.
Esta excepción la puedes capturar y lanzar un mensaje de aviso cuando ocurra.
Al producirse la excepción, el dato que quieres retornar conservará valor null, por tanto, puedes repetir este proceso con un bucle while que se repita mientras dicho dato sea igual a null.

Así no se aceptará ningún valor, que no sea un dato numérico válido.
El código podría quedar así. Te marco en negrita los cambios:

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
public class SoloNumeros {
 
	public static void main(String[] args) {
 
		String entradaTeclado ="";
 
		do {
 
			String cadena="";
			double importe=0,interes=0,interm=0,importes = 0,finali=0;
			int mes,mess;
			Scanner scanner =new Scanner(System.in);
 
			System.out.println("Ingrese la cantidad a depositar cada mes ");
			importe = pedirDouble();
 
 
			System.out.println("Ingrese la tasa de interes anual ");
			interes = pedirDouble();
 
 
 
 
 
			System.out.println("Ingrese la cantidad de meses que planea ahorrar");
			mes = pedirInt();
 
			for(int i=1;i<=mes;i++)
			{
 
				if(i>=1){
					importes=importe+importes;
 
 
					interm= (interes/100/mes);
 
					finali=importes*(1+interm);
 
					System.out.println(" mes : "+i+" saldo: " + finali );
					if(i==mes) {
						System.out.println("Desea Continuar");
						Scanner scanner1 =new Scanner(System.in);
						entradaTeclado = scanner1.nextLine();
 
					}//if
 
					else if(entradaTeclado.equals("n")) {
						System.exit(0);
					}//else
				}//if mayor
 
 
			}//for
 
		}//do
 
 
		while( entradaTeclado.equals("y"));
 
	}//fin1
 
	static double pedirDouble() {
 
		Scanner teclado = new Scanner(System.in);
		Double valor = null;
 
		while (valor == null) {
 
			try {
				valor = Double.parseDouble(teclado.nextLine());
			}
			catch (Exception ex) {
				System.out.println("ERROR. Introduzca valores numericos");
			}
		}
 
		return valor;
	}
 
	static int pedirInt() {
 
		Scanner teclado = new Scanner(System.in);
		Integer valor = null;
 
		while (valor == null) {
 
			try {
				valor = Integer.parseInt(teclado.nextLine());
			}
			catch (Exception ex) {
				System.out.println("ERROR. Introduzca valores numericos");
			}
		}
 
		return valor;
	}
 
}//fin2

Si lo probamos, en pantalla vemos que la petición de datos se repite si no se da un valor numérico correcto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Ingrese la cantidad a depositar cada mes
doce con 5
ERROR. Introduzca valores numericos
12.5
Ingrese la tasa de interes anual
3.6
Ingrese la cantidad de meses que planea ahorrar
cinco
ERROR. Introduzca valores numericos
5
 mes : 1 saldo: 12.590000000000002
 mes : 2 saldo: 25.180000000000003
 mes : 3 saldo: 37.77
 mes : 4 saldo: 50.36000000000001
 mes : 5 saldo: 62.95
Desea Continuar
n
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

validar números en java

Publicado por mendo (1 intervención) el 11/06/2023 22:53:03
y para que no acepte letras ni negativos como seria?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

validar números en java

Publicado por Kabuto (1381 intervenciones) el 11/06/2023 23:19:01
Si continuamos con los mismos ejemplo propuestos...

El tema de las letras ya estaría hecho. El parseo a Integer o Double no será posible si el valor introducido contiene alguna letra.

Para rechazar negativos si que habrá que añadir un poco de código extra. Muy simple, si el valor parseado es menor que 0, pues entonces NO lo aceptamos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static double pedirDoublePositivo() {
 
		Scanner teclado = new Scanner(System.in);
		Double valor = null;
 
		while (valor == null) {
 
			try {
				valor = Double.parseDouble(teclado.nextLine());
				//Parseo con éxito, no tiene letras. Pero falta comprobar si es negativo
				if  (valor < 0)
					valor = null; //Sí, es negativo. No lo queremos, así que anulamos este valor.
			}
			catch (Exception ex) {
				System.out.println("ERROR. Introduzca valores numericos");
			}
		}
 
		return valor;
	}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar