Tìm hiểu xem một số có phải là Double trong Java hay không


92

Tôi là một người mới sử dụng Java. Tôi đang cố gắng tìm hiểu xem một số có phải là Số kép hay không với một số như sau:

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

Sẽ đánh giá cao nếu ai đó có thể cho tôi biết cách sắp xếp lại cú pháp để làm cho nó hoạt động đúng cách.


Có phải chỉ tôi không, hay là typeof (đối tượng) không thực sự có thật trong C #? Tôi luôn nghĩ rằng đó là typeof (loại) ... object o = new object(); Type t = typeof(o);ném lỗi trình biên dịch nói rằng o is a variable but is used like a type. Tên của câu hỏi này gây hiểu lầm ...
Dan Rayson

Trong c #, tất cả các đối tượng đều có một Object#GetType()phương thức, phương thức này trả về a Type. Điều đó sau đó có thể được sử dụng để so sánh với typeof(). Trong trường hợp này, nó sẽ là items.elementAt(1).GetType() == typeof(double).
Frontear

Câu trả lời:


154

Thử cái này:

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

19
+1. Tôi cũng nghĩ bạn thực sự muốn kiểm tra elementAt(0); phần lớn nội dung trong Java là dựa trên zero.
ChssPly76

16

Vì đây là câu hỏi đầu tiên từ Google, tôi cũng sẽ thêm kiểu JavaScript typeofthay thế ở đây:

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

9

Phản xạ chậm hơn, nhưng phù hợp với tình huống khi bạn muốn biết liệu đó thuộc loại Chó hay Mèo chứ không phải là động vật. Vì vậy, bạn sẽ làm một cái gì đó như:

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

Không nói rằng câu trả lời ở trên không hoạt động, ngoại trừ phần kiểm tra null là cần thiết.

Một cách khác để trả lời đó là sử dụng generic và bạn được đảm bảo có Double như bất kỳ phần tử nào của item.

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

9
Bạn có thể vui lòng mọi người tìm hiểu để đưa ra lý do đánh giá tiêu cực không? Tôi cũng mới sử dụng java và tôi muốn xem câu trả lời này có gì sai nên tôi không cần phải thử!
enrey

1
Tôi sẽ tránh so sánh với một chuỗi được mã hóa cứng, điều gì sẽ xảy ra nếu tên lớp thay đổi, instanceof cũng tồn tại nên chúng tôi sử dụng nó.

@enrey Ưu điểm của điều này so với instanceof là gì?
Charles Shiller

@CharlesShiller Ưu điểm là ràng buộc trễ của chuỗi "Cat".
Robino

2
+1 .getClass().toString()vì tôi không thể nhập lớp do không hoạt động phụ thuộc một chiều. Cám ơn.
Hannes Schneidermayer

1

Sử dụng biểu thức chính quy để đạt được nhiệm vụ này. Vui lòng tham khảo mã dưới đây.

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
Ví dụ tuyệt vời, 'TypeOF' btw là gì? ở dòng cuối cùng.
Eddie Kumar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.