Capire se un numero è un Double in Java


92

Sono un principiante di Java. Sto cercando di capire se un numero è un doppio con qualcosa del genere:

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

Apprezzerei se qualcuno potesse dirmi come riorganizzare la sintassi per farlo funzionare correttamente.


Sono solo io, o typeof (object) non è effettivamente reale in C #? Ho sempre pensato che fosse typeof (type) ... object o = new object(); Type t = typeof(o);genera un errore del compilatore dicendo o is a variable but is used like a type. Il nome di questa domanda è fuorviante ...
Dan Rayson

In C #, tutti gli oggetti hanno un Object#GetType()metodo, che restituisce un Type. Questo può quindi essere utilizzato per confrontare con typeof(). In questo caso, sarebbe items.elementAt(1).GetType() == typeof(double).
Frontear

Risposte:


154

Prova questo:

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

19
+1. Penso anche che tu voglia effettivamente controllare elementAt(0); la maggior parte delle cose in Java è a base zero.
ChssPly76

16

Poiché questa è la prima domanda di Google, aggiungerò anche typeofqui l'alternativa in stile JavaScript :

myObject.getClass().getName() // String

9

La riflessione è più lenta, ma funziona per una situazione in cui vuoi sapere se è di tipo Cane o Gatto e non un'istanza di Animale. Quindi faresti qualcosa come:

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

Non dire che la risposta sopra non funziona, tranne per il fatto che è necessaria la parte di controllo null.

Un altro modo per rispondere è usare i generici e hai la garanzia di avere Double come qualsiasi elemento degli oggetti.

List<Double> items = new ArrayList<Double>();

9
Potresti per favore le persone imparare a mettere ragioni per una valutazione negativa? Anch'io sono nuovo in Java e mi piacerebbe vedere cosa c'è di sbagliato in questa risposta, quindi non devo provarlo!
enrey

1
Eviterei il confronto con una stringa hardcoded, cosa succede se il nome della classe cambia, anche instanceof esiste, quindi lo usiamo.

@enrey Qual è il vantaggio di questo rispetto a instanceof?
Charles Shiller

@CharlesShiller Il vantaggio è l'associazione tardiva della stringa "Cat".
Robino

2
+1 per .getClass().toString()perché non riesco a importare la classe a causa di una dipendenza unidirezionale inejction. Grazie.
Hannes Schneidermayer

1

Usa l'espressione regolare per ottenere questo compito. Fare riferimento al codice sottostante.

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);
    }
}

1
Ottimo esempio, cos'è "TypeOF" btw? nell'ultima riga.
Eddie Kumar
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.