Averiguar si un número es un doble en Java

92

Soy un novato en Java. Estoy tratando de averiguar si un número es un doble con algo como esto:

if ( typeof ( items.elementAt(1) )== Double ) {
       sum.add( i, items.elementAt(1));
}

Agradecería que alguien me dijera cómo reorganizar la sintaxis para que esto funcione correctamente.

Nicolas Raoul
fuente
¿Soy solo yo, o typeof (object) no es realmente real en C #? Siempre pensé que era typeof (type) ... object o = new object(); Type t = typeof(o);arroja un error del compilador que dice o is a variable but is used like a type. El nombre de esta pregunta es engañoso ...
Dan Rayson
En c #, todos los objetos tienen un Object#GetType()método, que devuelve un Type. Eso luego se puede usar para comparar con typeof(). En este caso, lo sería items.elementAt(1).GetType() == typeof(double).
Frontear

Respuestas:

154

Prueba esto:

if (items.elementAt(1) instanceof Double) {
   sum.add( i, items.elementAt(1));
}
esquí
fuente
19
+1. También creo que en realidad quieres comprobarlo elementAt(0); la mayoría de las cosas en Java están basadas en cero.
ChssPly76
16

Dado que esta es la primera pregunta de Google, también agregaré la typeofalternativa de estilo JavaScript aquí:

myObject.getClass().getName() // String
Rob Fox
fuente
9

La reflexión es más lenta, pero funciona para una situación en la que desea saber si es del tipo Perro o Gato y no una instancia de Animal. Entonces harías algo como:

if(null != items.elementAt(1) && items.elementAt(1).getClass().toString().equals("Cat"))
{
//do whatever with cat.. not any other instance of animal.. eg. hideClaws();
}

No decir la respuesta anterior no funciona, excepto que la parte de verificación nula es necesaria.

Otra forma de responder es usar genéricos y se le garantiza que tendrá Double como cualquier elemento de los elementos.

List<Double> items = new ArrayList<Double>();
Chookoos
fuente
9
¿Podrías por favor que la gente aprenda a poner razones para una calificación negativa? Yo también soy nuevo en Java y me gustaría ver qué pasa con esta respuesta para no tener que intentarlo.
enrey
1
Evitaría comparar con una cadena codificada de forma rígida, ¿qué pasa si el nombre de la clase cambia, también existe instanceof, así que lo usamos?
@enrey ¿Cuál es la ventaja de esto sobre instanceof?
Charles Shiller
@CharlesShiller La ventaja es la unión tardía de la cadena "Cat".
Robino
2
+1 .getClass().toString()porque no puedo importar la clase debido a una inejión de dependencia unidireccional. Gracias.
Hannes Schneidermayer
1

Utilice expresiones regulares para lograr esta tarea. Consulte el siguiente código.

public static void main(String[] args) {
    try {

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Enter your content: ");
        String data = reader.readLine();            
        boolean b1 = Pattern.matches("^\\d+$", data);
        boolean b2 = Pattern.matches("[0-9a-zA-Z([+-]?\\d*\\.+\\d*)]*", data); 
        boolean b3 = Pattern.matches("^([+-]?\\d*\\.+\\d*)$", data);
        if(b1) {
            System.out.println("It is integer.");
        } else if(b2) {
            System.out.println("It is String. ");
        } else if(b3) {
            System.out.println("It is Float. ");
        }           
    } catch (IOException ex) {
        Logger.getLogger(TypeOF.class.getName()).log(Level.SEVERE, null, ex);
    }
}
kumaranc
fuente
1
Gran ejemplo, ¿qué es 'TypeOF' por cierto? en la última línea.
Eddie Kumar