Java - Java - Exception in thread "main" java.lang.NumberFormatException: For input string: "dd"

 
Vista:

Java - Exception in thread "main" java.lang.NumberFormatException: For input string: "dd"

Publicado por Dan (1 intervención) el 05/05/2020 06:18:43
Me podrían ayudar a ver que es lo que tengo mal, por favor.

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
import java.util.Scanner;
public class Dowhile2{
   public static void main(String[]args){
   Scanner entrada=new Scanner(System.in);
 
	   String num="";
 
 
	  do{
 
		  System.out.println("Escribe un numero natural o escribe no para salir ");
		  num=entrada.nextLine();
 
		  int num2=Integer.parseInt(num);
 
		  if(num2<0){
			  System.out.println("Dije un numero natural");
		  }
	else if (num2>=0){
 
		  System.out.println(num+" x 1 = "+(1*num2));
		  System.out.println(num+" x 2 = "+(2*num2));
		  System.out.println(num+" x 3 = "+(3*num2));
		  System.out.println(num+" x 4 = "+(4*num2));
		  System.out.println(num+" x 5 = "+(5*num2));
		  System.out.println(num+" x 6 = "+(6*num2));
		  System.out.println(num+" x 7 = "+(7*num2));
		  System.out.println(num+" x 8 = "+(8*num2));
		  System.out.println(num+" x 9 = "+(9*num2));
	      System.out.println(num+" x 10 = "+(10*num2));}
	else {num="no";}
 
 
   }while(num!="no");
 
	  System.out.println("Sayonara");
 
   }
}
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 daenius
Val: 70
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Java - Exception in thread "main" java.lang.NumberFormatException: For input string: "dd"

Publicado por daenius (20 intervenciones) el 05/05/2020 12:42:07
A priori por lo que puedo ver, el error que te tira es porque al parsear algo a entero o al asignarle un valor a un entero, esa misma cosa no es asignable a un objeto de tipo "int" y salta la excepción.

Ahora, eso de "dd" seguramente sea porque en el escaner escribiste eso de prueba y te saltó, pero de todas formas, no puedes preguntarle al usuario "Escribe un numero natural o escribe no para salir ", porque nada más ponga "no", te va a saltar. Es imparseable en "int num2=Integer.parseInt(num);"

También intentaría meter el todo lo que es el escáner dentro de un try-catch y cerrar el escaner una vez haya terminado la operación que sea.
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
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

Java - Exception in thread "main" java.lang.NumberFormatException: For input string: "dd"

Publicado por Kabuto (1381 intervenciones) el 05/05/2020 16:55:28
daenius está en lo cierto.

Una vez que el usuario ha tecleado respuesta, la primera pregunta que tendrías que hacer es si se ha tecleado un "no".
Y no uses el comparador básico -> ==
Has de usar el método equals() para comparar objetos. Un String es un objeto, no es un dato primitivo.

1
2
3
4
5
6
7
8
9
System.out.println("Escribe un numero natural o escribe no para salir ");
num=entrada.nextLine();
 
if (!num.equals("no")) {
//Si num NO EQUIVALE a "no"...
...
....
....
}

En la condición del while, lo mismo, usa el método equals y no el comparador -> !=

Esto te sirve para controlar convenientemente si el usuario ha introducido "no".

Ahora bien, no se está controlando si el usuario introduce cualquier otra cosa que no sea un número, por ejemplo, la cadena "dd" como has hecho tú.

Al intentar parsear "dd" a un valor numérico, es imposible obviamente y se provoca una excepción.
Para controla esto, has de usar try catch, estas instrucciones capturarán la excepción y podrás informar al usuario de su error sin que el programa se vaya al carajo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
try {
		  int num2=Integer.parseInt(num); //Esta línea generará excepción si num no tiene cadena de números
 
		  if(num2<0){
			  System.out.println("Dije un numero natural");
		  }
	else if (num2>=0){
 
		  System.out.println(num+" x 1 = "+(1*num2));
		  System.out.println(num+" x 2 = "+(2*num2));
		  System.out.println(num+" x 3 = "+(3*num2));
		  System.out.println(num+" x 4 = "+(4*num2));
		  System.out.println(num+" x 5 = "+(5*num2));
		  System.out.println(num+" x 6 = "+(6*num2));
		  System.out.println(num+" x 7 = "+(7*num2));
		  System.out.println(num+" x 8 = "+(8*num2));
		  System.out.println(num+" x 9 = "+(9*num2));
	          System.out.println(num+" x 10 = "+(10*num2));
		   }
		  }
		  catch (NumberFormatException ex) {//Capturamos excepción,informamos a usuario y programa continúa
		      System.out.println("Por favor, introduce un número natural");
		  }
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

Java - Exception in thread "main" java.lang.NumberFormatException: For input string: "dd"

Publicado por Dan (1 intervención) el 06/05/2020 04:59:38
Gracias, me ayudaron mucho
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

Java - Exception in thread "main" java.lang.NumberFormatException: For input string: "dd"

Publicado por leosoft (1 intervención) el 06/05/2020 23:19:46
te falta parsear, utilizar el metodo equals para comparar String. estas utilizando un comparador comun.
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