Mencari tahu apakah suatu bilangan adalah Double di Java

92

Saya seorang pemula Java. Saya mencoba mencari tahu apakah suatu angka adalah Double dengan sesuatu seperti ini:

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

Akan sangat menghargai jika seseorang dapat memberi tahu saya cara mengatur ulang sintaks agar ini berfungsi dengan benar.

Nicolas Raoul
sumber
Apakah hanya saya, atau apakah tipe (objek) sebenarnya tidak nyata di C #? Saya selalu berpikir itu adalah typeof (type) ... object o = new object(); Type t = typeof(o);melempar pesan kesalahan compiler o is a variable but is used like a type. Nama pertanyaan ini menyesatkan ...
Dan Rayson
Di c #, semua objek memiliki Object#GetType()metode, yang mengembalikan a Type. Itu kemudian dapat digunakan untuk membandingkan typeof(). Dalam kasus ini, itu akan terjadi items.elementAt(1).GetType() == typeof(double).
Frontear

Jawaban:

154

Coba ini:

if (items.elementAt(1) instanceof Double) {
   sum.add( i, items.elementAt(1));
}
main ski
sumber
19
+1. Saya juga berpikir Anda benar-benar ingin memeriksa elementAt(0); mayoritas item di Java berbasis nol.
ChssPly76
16

Karena ini adalah pertanyaan pertama dari Google, saya akan menambahkan typeofalternatif gaya JavaScript di sini juga:

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

Refleksi lebih lambat, tetapi berfungsi untuk situasi ketika Anda ingin tahu apakah itu dari tipe Anjing atau Kucing dan bukan instance dari Hewan. Jadi Anda akan melakukan sesuatu seperti:

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

Tidak mengatakan jawaban di atas tidak berfungsi, kecuali bagian pemeriksaan nol diperlukan.

Cara lain untuk menjawabnya adalah gunakan obat generik dan Anda dijamin memiliki Double sebagai elemen item apa pun.

List<Double> items = new ArrayList<Double>();
Chookoo
sumber
9
Bisakah Anda menyenangkan orang lain untuk belajar memberi alasan untuk penilaian negatif? Saya juga baru di Jawa dan saya ingin melihat apa yang salah dengan jawaban ini jadi saya tidak perlu mencobanya!
enrey
1
Saya akan menghindari membandingkan dengan string kode keras, bagaimana jika nama kelas berubah, juga ada instanceof sehingga kami menggunakannya.
@enrey Apa keuntungan dari ini atas instanceof?
Charles Shiller
@CharlesShiller Keuntungannya adalah pengikatan string "Cat" yang terlambat.
Robino
2
1 untuk .getClass().toString()karena saya tidak dapat mengimpor kelas karena ketidaksesuaian ketergantungan satu arah. Terima kasih.
Hannes Schneidermayer
1

Gunakan ekspresi reguler untuk mencapai tugas ini. Silakan lihat kode di bawah ini.

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
sumber
1
Contoh bagus, apa itu 'TypeOF' btw? di baris terakhir.
Eddie Kumar