Autor Tema: CU00635B - Sentencia de asignación java con distintos tipos de datos numéricos  (Leído 4153 veces)

LPM

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 35
    • Ver Perfil
Hola. Tengo una consulta sobre esto:

Código: [Seleccionar]
Si peso es una variable de tipo int y sobrepeso es una variable de tipo double ó boolean debemos evitar sentencias como sobrepeso = 2 * peso
pero dan este ejemplo de sentencia de asignación compuesta:

Código: [Seleccionar]
saldo  –= precioCaja * cantidadCajas;
precio debe ser tipo double, y cantidad int.
es porque no generaria ningún problema en pasar de entero a decimal?

después, en el curso anterior, el CU00634B , nos pide:

Código: [Seleccionar]
Dadas las variables de tipo int con valores A = 5, B = 3, C = -12 indicar si la evaluación de estas expresiones daría como resultado verdadero o falso:

a) A > 3                                                            b) A > C                                               c) A < C
etc...

con lo que devuelvo un valor boolean en base a valores int.



« Última modificación: 16 de Noviembre 2014, 16:49 por Alex Rodríguez »

Gilding

  • Sin experiencia
  • *
  • Mensajes: 44
    • Ver Perfil
Re: CU00635B - Sentencia de asignación
« Respuesta #1 en: 14 de Noviembre 2014, 19:49 »
Hola LPM!

Para entender tu primer problema primero hay que ir a la base de las matemáticas. Doy por hecho que sabes que existen distintos tipos de conjuntos de números, en total son 5 conjuntos de tipos de números. Nosotros nos vamos a centrar en 2:

Los números Enteros. Que son los números comprendidos entre en el 1 y el infinito (números positivos), el cero, y del -1 al menos infinito (los números negativos).

Los números Reales. Que son los números comprendidos entre el 1 y el infinito (números positivos), el cero, del -1 al menos infinito y todos los números decimales que hay entre medias. Es decir, que los números reales comprenden los números enteros... los números enteros estan dentro de los números decimales. Pero no ocurre al contrario, los decimales no estan dentro de los números enteros.

Si te pongo como ejemplo un 2, este dos sin más podría ser un número entero o un número decimal (float o double). Si pusiera 2,00 (o 2.00 según tengas que usar el punto o la coma), entonces seria un número decimal (float o double).

Ahora, remitiendome a tu primer ejemplo, te indican que no es recomendable la sentencia "sobrepeso = 2 * peso", cuando sobrepeso es de tipo decimal (double) y peso de tipo entero (int). Por si misma esta sentencia es correcta, porque tanto el "2", como "peso" son de tipo entero, dando como resultado otro número de tipo entero, que podría almacenarse perfectamente dentro de una variable decimal. La cuestión es, si realizo una operación con dos números enteros... ¿Por qué guardarlo en una variable de tipo decimal?. Estamos desperdiciando memoria al utilizar una variable de tipo decimal (que requiere más memoria), en vez de utilizar una variable de tipo entero (que requiere menos memoria que una variable de tipo decimal). Y además en un código de cierta longitud, podría dar lugar a errores. Por no mencionar que dificulta la lectura del código para el programador.

Sobre el segundo ejemplo: Este ejemplo es correcto, por dos motivos. Para el primero debes ver su versión "extendida", si no utilizamos el operador de asignación compuesta:
saldo = saldo - precioCaja * cantidadCajas;
Como puedes observar, en las operaciones estamos incluyendo la variable "saldo", que es de tipo decimal, por lo tanto cabe la posibilidad de que el resultado tenga decimales.
El segundo motivo por el que es válida se da en el supuesto que "precioCaja" sea de tipo decimal (float o double). Yo con verlo estoy seguro que es de tipo decimal, porque por norma general el precio de un objeto suele tener decimales o puede tener decimales. Con todo esto llegamos a la conclusión que la sentencia es válida, aunque una de las variables sea de tipo entero (cantidadCajas), porque si realizamos una operación entre un número entero y uno decimal, el resultado normalmente será un número decimal.

Llegando a tu último ejemplo debes ser consciente de una cosa, no estas realizando una operación aritmética, sino una operación lógica. Estas comparando un número con otro, no sumandolos, restandolos, multiplicandolos, etc etc. Cuando realizamos una comparación, ya sea entre números o cualquier otra cosa, solo podemos obtener dos resultados: o son iguales (verdadero, true, etc) o no son iguales (falso, false, etc). En tu ejemplo en vez de si son iguales se compara si es mayor que o menor que, y los resultados posibles en cada caso son los mismos, solo 2: o es mayor que, o no es mayor que; o es menor que, o no es menor que. Si nos remitimos a la definición de lo que es una variable booleana, vemos que este tipo de variable solo puede tener dos resultados: Si o No, Verdadero o Falso, 1 o 0, True o False, etc etc. Por ello se dice que estas comparaciones son de tipo booleano, y solo pueden devolverte verdadero o falso.

Espero que te sirva de aclaración. Si tienes alguna duda más, no te cortes en preguntar.

Un saludo!!

LPM

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 35
    • Ver Perfil
Re: CU00635B - Sentencia de asignación
« Respuesta #2 en: 14 de Noviembre 2014, 20:34 »
gracias, Gilding, quedó claro =)

 

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".