Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: micaelasol en 28 de Febrero 2022, 01:40
-
Hola. Aquí esta mi propuesta de respuesta para el ejercicio CU00670B del curso de programación Java POO pdf de aprenderaprogramar:
El API de Java proporciona herramientas para pedir datos al usuario a través de ventanas. Un ejemplo de ello es el uso de la clase JOptionPane perteneciente al paquete javax.swing.JOptionPane del API Java. El método showInputDialog permite pedir un dato al usuario y almacena su respuesta en un objeto de tipo String. Queremos crear un programa que pida al usuario un número y muestre por pantalla el doble de ese número. Para ello hemos creado este código:
import javax.swing.JOptionPane;
public class ejemplo1 {
public static void main (String[] Args) {
String entradaUsuario = JOptionPane.showInputDialog ( "Introduzca un número:" );
System.out.println ("El doble del número introducido es: " + 2*entradaUsuario);
}
}
El problema que tenemos es que nos salta un mensaje de error “operator * cannot be applied to int, java.lang.String”.
¿Qué interpretación haces de este mensaje de error?
Para mí lanza ese error ya que aunque al usuario se le pidió que ingrese un número entero (int), con la clase JOptionPane, ese número entero se almacena en un String, es decir que se convierte en un objeto. Entonces no se puede utilizar operadores de tipo primitivo (como se usó el de multiplicación " * ") para objetos.
¿Cómo se puede corregir el código para que a través de una conversión de tipos se ejecute el programa?
Yo creo que como solución sería volver a convertir esa cadena de texto (String) a un entero para poder multiplicarlo por dos.
import javax.swing.JOptionPane;
public class EjConversiones {
public static void main (String [] args){
String entradaUsuario = JOptionPane.showInputDialog("Introduzca un número: "); //JOptionPane.showInputDialogo es la Clase.yElMétodo
System.out.println ("el doble del número introducido es: " + 2 * Integer.parseInt(entradaUsuario)); // (abajo)
//Integer tiene varios métodos estáticos y uno de ellos es parseInt() en donde recibe como argumento un String y lo convierte a un valor int.
//Este método puede ser utlizado sin que se cree un objeto
}
}
-
Perfecto.
Aunque quiero comentar algo, por si en el futuro te encontrases con un caso distinto.
Esta línea que has puesto, es totalmente correcta y perfecta:
System.out.println ("el doble del número introducido es: " + 2 * Integer.parseInt(entradaUsuario));
Pero, supongamos que en lugar de multiplicar * 2, te piden que le sumes + 2:
System.out.println ("Sumar 2 al numero introducido da el resultado: " + 2 + Integer.parseInt(entradaUsuario));
Si probamos con esa línea, veremos que no se hace ninguna suma aritmética, si no que el 2 se concatena con el otro número.
El operador + sirve para sumar números, pero también para concatenar Strings. Y Java no puede adivinar cuál es nuestra intención, así que si se encuentra al menos un String en la expresión, los tratará a todos como Strings y hará concatenación
En el primer ejemplo esto no pasaba, porque el operador * es estrictamente aritmético así que no hay dudas de que es una multiplicación.
Pero cuando se trata de sumar, puede haber ambigüedad y la preferencia de Java será concatenar.
Esta ambigüedad podemos evitarla encerrando entre paréntesis la parte de la expresión que queremos que se sume:
System.out.println ("Sumar 2 al numero introducido da el resultado: " + [b](2 + Integer.parseInt(entradaUsuario))[/b]);Al hacer eso, le decimos a Java que lo hay entre paréntesis, es una expresión en si misma y ha de ser evaluada al margen de todo lo demás.
El resultado que de esa expresión, ya sí luego se evaluará con el resto de elementos de la "expresión principal"
Esto lo comento solo por si en algún momento te encontrase con un caso como este y te encontrases con que logras hacer la suma porque Java se empeña en concatenar.
Ahora ya sabes el motivo y como solucionarlo.
Un saludo.
-
Que gran consejo, muchas gracias.