Herausfinden, ob eine Zahl in Java ein Double ist


92

Ich bin ein Java-Neuling. Ich versuche herauszufinden, ob eine Zahl ein Double mit so etwas ist:

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

Würde mich freuen, wenn mir jemand sagen könnte, wie ich die Syntax neu anordnen kann, damit dies richtig funktioniert.


Ist es nur ich oder ist typeof (Objekt) in C # nicht wirklich real? Ich dachte immer, es sei typeof (type) ... object o = new object(); Type t = typeof(o);wirft einen Compilerfehler aus o is a variable but is used like a type. Der Name dieser Frage ist falsch ...
Dan Rayson

In c # haben alle Objekte eine Object#GetType()Methode, die a zurückgibt Type. Das kann dann zum Vergleichen verwendet werden typeof(). In diesem Fall wäre es items.elementAt(1).GetType() == typeof(double).
Frontear

Antworten:


154

Versuche dies:

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

19
+1. Ich denke auch, dass Sie tatsächlich überprüfen möchten elementAt(0); Die meisten Dinge in Java basieren auf Null.
ChssPly76

15

Da dies die erste Frage von Google ist, füge ich auch hier die typeofAlternative im JavaScript-Stil hinzu :

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

9

Die Reflexion ist langsamer, funktioniert jedoch in einer Situation, in der Sie wissen möchten, ob es sich um einen Hund oder eine Katze handelt und nicht um eine Tierinstanz. Sie würden also so etwas tun:

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

Nicht zu sagen, dass die obige Antwort nicht funktioniert, außer dass der Nullprüfungsteil notwendig ist.

Eine andere Möglichkeit, dies zu beantworten, besteht darin, Generika zu verwenden, und Sie haben garantiert Double als jedes Element von Elementen.

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

9
Könnten Sie bitte lernen, Gründe für eine negative Bewertung zu nennen? Ich bin auch neu in Java und würde gerne sehen, was mit dieser Antwort falsch ist, damit ich es nicht versuchen muss!
Enrey

1
Ich würde es vermeiden, mit einer fest codierten Zeichenfolge zu vergleichen. Was passiert, wenn sich der Klassenname ändert? Auch eine Instanz von existiert, also verwenden wir diese.

@enrey Was ist der Vorteil dieser gegenüber Instanz von?
Charles Shiller

@ CharlesShiller Der Vorteil ist das späte Binden der Zeichenfolge "Cat".
Robino

2
+1 für, .getClass().toString()weil ich die Klasse aufgrund einer Einweg-Abhängigkeitsinjektion nicht importieren kann. Vielen Dank.
Hannes Schneidermayer

1

Verwenden Sie reguläre Ausdrücke, um diese Aufgabe zu erfüllen. Bitte beachten Sie den folgenden Code.

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
Tolles Beispiel, was ist übrigens 'TypeOF'? in der letzten Zeile.
Eddie Kumar
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.