Ustalenie, czy liczba jest podwójna w Javie

94

Jestem nowicjuszem w Javie. Próbuję dowiedzieć się, czy liczba jest Double z czymś takim:

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

Byłbym wdzięczny, gdyby ktoś mógł mi powiedzieć, jak zmienić składnię, aby działała poprawnie.

Nicolas Raoul
źródło
Czy to tylko ja, czy też typeof (object) nie jest rzeczywiste w C #? Zawsze myślałem, że to typeof (type) ... object o = new object(); Type t = typeof(o);wyświetla komunikat o błędzie kompilatora o is a variable but is used like a type. Nazwa tego pytania jest myląca ...
Dan Rayson,
W języku C # wszystkie obiekty mają Object#GetType()metodę, która zwraca plik Type. Można to następnie porównać z typeof(). W tym przypadku tak by było items.elementAt(1).GetType() == typeof(double).
Frontear

Odpowiedzi:

157

Spróbuj tego:

if (items.elementAt(1) instanceof Double) {
   sum.add( i, items.elementAt(1));
}
narty
źródło
19
+1. Myślę też, że faktycznie chcesz to sprawdzić elementAt(0); większość rzeczy w Javie jest oparta na zerach.
ChssPly76
16

Ponieważ jest to pierwsze pytanie od Google, dodam typeoftutaj również alternatywę stylu JavaScript :

myObject.getClass().getName() // String
Rob Fox
źródło
8

Odbicie jest wolniejsze, ale działa w sytuacji, gdy chcesz wiedzieć, czy jest to typ psa czy kota, a nie instancja zwierzęcia. Więc zrobiłbyś coś takiego:

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

Nie mówienie powyższej odpowiedzi nie działa, z wyjątkiem części sprawdzającej wartość null.

Innym sposobem na odpowiedź jest użycie typów ogólnych i masz gwarancję, że każdy element pozycji ma Double.

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

źródło
9
Czy mógłbyś, aby ludzie nauczyli się podawać przyczyny negatywnej oceny? Ja też jestem nowy w Javie i chciałbym zobaczyć, co jest nie tak z tą odpowiedzią, więc nie muszę tego próbować!
enrey
1
Unikałbym porównywania do sztywno zakodowanego ciągu znaków, co jeśli nazwa klasy ulegnie zmianie, istnieje również instanceof, więc używamy tego.
@enrey Jaka jest przewaga tego w porównaniu z instancją?
Charles Shiller
@CharlesShiller Zaletą jest późne wiązanie napisu „Kot”.
Robino
2
+1 za, .getClass().toString()ponieważ nie mogę zaimportować klasy z powodu inejction zależności jednokierunkowej. Dzięki.
Hannes Schneidermayer
1

Aby wykonać to zadanie, użyj wyrażenia regularnego. Proszę zapoznać się z poniższym kodem.

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
źródło
1
Świetny przykład, czym jest „TypeOF” przy okazji? w ostatniej linii.
Eddie Kumar