Autor Tema: operator * cannot be applied to int, java.lang.String convertir tipos CU00670B  (Leído 2176 veces)

micaelasol

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 33
    • Ver Perfil
Hola. Aquí esta mi propuesta de respuesta para el ejercicio CU00670B del curso de programación Java POO pdf de aprenderaprogramar:

Citar
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”.

Citar
¿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.

Citar
¿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.

Código: [Seleccionar]
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
    }
}
« Última modificación: 19 de Agosto 2022, 19:35 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Conversión de tipos de datos en java (tipado). (CU00670B)
« Respuesta #1 en: 28 de Febrero 2022, 12:23 »
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:
Código: [Seleccionar]
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:

Código: [Seleccionar]
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:
Código: [Seleccionar]
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.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

micaelasol

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 33
    • Ver Perfil
Re: Conversión de tipos de datos en java (tipado). (CU00670B)
« Respuesta #2 en: 01 de Marzo 2022, 16:56 »
Que gran consejo, muchas gracias.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".