Introducción
En este laboratorio, aprenderás cómo determinar si un número es un doble (double) en Java. Exploraremos diferentes técnicas, comenzando por verificar si un objeto es una instancia de la clase envolvente Double utilizando el operador instanceof.
Luego, aprenderás cómo analizar (parsear) una cadena de texto a un doble y manejar posibles errores. Finalmente, cubriremos cómo diferenciar entre los tipos Double e Integer para asegurarte de trabajar con la representación numérica correcta.
Comprobar instancia de la clase Double
En este paso, exploraremos la clase Double en Java y aprenderemos cómo verificar si un objeto es una instancia de esta clase. En Java, los tipos de datos primitivos como double tienen clases envolventes correspondientes, como Double. La clase Double proporciona métodos útiles para trabajar con números de punto flotante de doble precisión.
Primero, creemos un nuevo archivo Java llamado DoubleCheck.java en el directorio ~/project. Puedes hacer esto utilizando el Explorador de archivos del WebIDE en el lado izquierdo. Haz clic derecho en el directorio ~/project, selecciona "Nuevo archivo" y escribe DoubleCheck.java.
Ahora, abre el archivo DoubleCheck.java en el editor y agrega el siguiente código:
public class DoubleCheck {
public static void main(String[] args) {
// Declare a primitive double variable
double primitiveDouble = 123.45;
// Declare a Double object
Double doubleObject = 67.89;
// Declare an Integer object
Integer integerObject = 100;
// Check if primitiveDouble is an instance of Double (This will not work directly)
// System.out.println("Is primitiveDouble an instance of Double? " + (primitiveDouble instanceof Double)); // This line would cause a compile error
// Check if doubleObject is an instance of Double
System.out.println("Is doubleObject an instance of Double? " + (doubleObject instanceof Double));
// Check if integerObject is an instance of Double
System.out.println("Is integerObject an instance of Double? " + (integerObject instanceof Double));
}
}
En este código:
- Declaramos una variable primitiva
doublellamadaprimitiveDouble. - Declaramos un objeto
DoublellamadodoubleObject. - Declaramos un objeto
IntegerllamadointegerObjectpara comparación. - Utilizamos el operador
instanceofpara verificar sidoubleObjecteintegerObjectson instancias de la claseDouble. - Ten en cuenta que el operador
instanceofno se puede utilizar directamente con tipos primitivos comodouble.
Guarda el archivo DoubleCheck.java.
Ahora, compilemos y ejecutemos el programa. Abre la Terminal en la parte inferior del WebIDE. Asegúrate de estar en el directorio ~/project.
Compila el código utilizando javac:
javac DoubleCheck.java
Si no hay errores de compilación, ejecuta el código compilado utilizando java:
java DoubleCheck
Deberías ver una salida similar a esta:
Is doubleObject an instance of Double? true
Is integerObject an instance of Double? false
Esta salida confirma que doubleObject es una instancia de la clase Double, mientras que integerObject no lo es. Esto demuestra cómo utilizar el operador instanceof para verificar el tipo de un objeto en Java.
Convertir una cadena de texto (string) a Double
En este paso, aprenderemos cómo convertir una cadena de texto (String) que representa un número en un valor de punto flotante (double) en Java. Esta es una tarea común cuando se reciben datos numéricos en formato de texto, por ejemplo, a través de la entrada del usuario o al leer desde un archivo. La clase Double proporciona un método estático llamado parseDouble() específicamente para este propósito.
Creemos un nuevo archivo Java llamado StringtoDouble.java en el directorio ~/project. Utiliza el Explorador de archivos del WebIDE para crear este archivo.
Abre StringtoDouble.java y agrega el siguiente código:
public class StringtoDouble {
public static void main(String[] args) {
// A string representing a double value
String doubleString = "987.65";
// Another string representing a double value
String anotherDoubleString = "3.14159";
// A string that is not a valid double
String invalidDoubleString = "hello";
// Parse the strings to double values
try {
double parsedDouble1 = Double.parseDouble(doubleString);
double parsedDouble2 = Double.parseDouble(anotherDoubleString);
System.out.println("Parsed double from \"" + doubleString + "\": " + parsedDouble1);
System.out.println("Parsed double from \"" + anotherDoubleString + "\": " + parsedDouble2);
// Attempt to parse an invalid string (This will cause an error)
// double parsedDouble3 = Double.parseDouble(invalidDoubleString);
// System.out.println("Parsed double from \"" + invalidDoubleString + "\": " + parsedDouble3);
} catch (NumberFormatException e) {
System.out.println("Error parsing string: " + e.getMessage());
}
}
}
En este código:
- Tenemos dos cadenas de texto,
doubleStringyanotherDoubleString, que contienen representaciones válidas de números de punto flotante. - También tenemos
invalidDoubleString, que no representa un número válido. - Utilizamos
Double.parseDouble()para convertir las cadenas válidas en valores primitivos de tipodouble. - Encerramos el código de conversión en un bloque
try-catch. Esto es importante porque si la cadena no se puede convertir en un número de punto flotante válido (comoinvalidDoubleString),parseDouble()lanzará una excepciónNumberFormatException. El bloquecatchmaneja este error de manera adecuada.
Guarda el archivo StringtoDouble.java.
Ahora, compilemos y ejecutemos el programa. Abre la Terminal y asegúrate de estar en el directorio ~/project.
Compila el código:
javac StringtoDouble.java
Ejecuta el código compilado:
java StringtoDouble
Deberías ver una salida similar a esta:
Parsed double from "987.65": 987.65
Parsed double from "3.14159": 3.14159
Si descomentas las líneas que intentan convertir invalidDoubleString y vuelves a ejecutar el código, verás el mensaje de error del bloque catch, lo que demuestra cómo el programa maneja entradas inválidas.
Este paso te muestra cómo convertir representaciones de números en cadenas de texto en valores reales de tipo double, lo cual es una habilidad crucial para manejar entradas en tus programas Java.
Diferenciar Double de Integer
En este paso, exploraremos cómo diferenciar entre valores de tipo double y int (entero) en Java, especialmente cuando se tratan números que pueden parecer similares. Mientras que double puede representar números con decimales y también números enteros, int solo puede representar números enteros. Comprender esta diferencia es crucial para elegir el tipo de dato correcto y realizar cálculos precisos.
Creemos un nuevo archivo Java llamado NumberTypes.java en el directorio ~/project utilizando el Explorador de archivos del WebIDE.
Abre NumberTypes.java y agrega el siguiente código:
public class NumberTypes {
public static void main(String[] args) {
// An integer variable
int integerValue = 10;
// A double variable representing a whole number
double doubleValueWhole = 20.0;
// A double variable representing a number with a decimal part
double doubleValueDecimal = 30.5;
// Print the values and their types (implicitly)
System.out.println("Integer value: " + integerValue);
System.out.println("Double value (whole): " + doubleValueWhole);
System.out.println("Double value (decimal): " + doubleValueDecimal);
// Check the type using instanceof (for wrapper classes)
Integer integerObject = 100;
Double doubleObject = 200.0;
System.out.println("Is integerObject an instance of Integer? " + (integerObject instanceof Integer));
System.out.println("Is doubleObject an instance of Double? " + (doubleObject instanceof Double));
System.out.println("Is integerObject an instance of Double? " + (integerObject instanceof Double));
System.out.println("Is doubleObject an instance of Integer? " + (doubleObject instanceof Integer));
// Demonstrate potential issues with comparing double and int
System.out.println("Is integerValue equal to doubleValueWhole? " + (integerValue == doubleValueWhole)); // This comparison works due to type promotion
// System.out.println("Is integerValue equal to doubleValueDecimal? " + (integerValue == doubleValueDecimal)); // This would be false
}
}
En este código:
- Declaramos una variable de tipo
intllamadaintegerValue. - Declaramos dos variables de tipo
double, una que representa un número entero (doubleValueWhole) y otra con una parte decimal (doubleValueDecimal). - Imprimimos estos valores para observar su representación.
- Utilizamos el operador
instanceofcon las clases envolventesIntegeryDoublepara comprobar explícitamente los tipos de objeto, de manera similar a lo que hicimos en el primer paso. - También mostramos una comparación entre un
inty undouble. Java realiza una promoción de tipo, convirtiendo elinten undoubleantes de la comparación, por lo queintegerValue == doubleValueWholese evalúa comotrue.
Guarda el archivo NumberTypes.java.
Ahora, compilemos y ejecutemos el programa. Abre la Terminal y asegúrate de estar en el directorio ~/project.
Compila el código:
javac NumberTypes.java
Ejecuta el código compilado:
java NumberTypes
Deberías ver una salida similar a esta:
Integer value: 10
Double value (whole): 20.0
Double value (decimal): 30.5
Is integerObject an instance of Integer? true
Is doubleObject an instance of Double? true
Is integerObject an instance of Double? false
Is doubleObject an instance of Integer? false
Is integerValue equal to doubleValueWhole? true
Esta salida ayuda a ilustrar la diferencia entre cómo se almacenan y representan los valores de tipo int y double, y cómo se puede utilizar instanceof con sus clases envolventes para comprobar sus tipos. Si bien un double puede contener un valor entero, sigue siendo fundamentalmente un tipo de punto flotante, distinto de un tipo entero.
Resumen
En este laboratorio (lab), aprendimos cómo verificar si un número es de tipo Double en Java. Comenzamos explorando la clase envolvente Double y utilizando el operador instanceof para determinar si un objeto es una instancia de Double. Observamos que instanceof funciona con objetos Double, pero no directamente con tipos primitivos double.



