Выяснение, является ли число двойным в Java

95

Я новичок в Java. Я пытаюсь выяснить, является ли число двойным с чем-то вроде этого:

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

Был бы признателен, если бы кто-нибудь мог сказать мне, как изменить синтаксис, чтобы это работало правильно.

Николя Рауль
источник
Это только у меня, или typeof (object) на самом деле нереален в C #? Я всегда думал, что это typeof (type) ... object o = new object(); Type t = typeof(o);выдает ошибку компилятора o is a variable but is used like a type. Название этого вопроса вводит в заблуждение ...
Дэн Рэйсон
В C # у всех объектов есть Object#GetType()метод, который возвращает Type. Затем это можно использовать для сравнения с typeof(). В этом случае было бы items.elementAt(1).GetType() == typeof(double).
Frontear

Ответы:

158

Попробуй это:

if (items.elementAt(1) instanceof Double) {
   sum.add( i, items.elementAt(1));
}
кататься на лыжах
источник
19
+1. Я также думаю, что вы действительно хотите проверить elementAt(0); большинство вещей в Java начинаются с нуля.
ChssPly76,
17

Поскольку это первый вопрос от Google, я также добавлю typeofсюда альтернативный стиль JavaScript :

myObject.getClass().getName() // String
Роб Фокс
источник
8

Отражение происходит медленнее, но работает в ситуации, когда вы хотите знать, относится ли это к типу Dog или Cat, а не к экземпляру Animal. Итак, вы бы сделали что-то вроде:

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

Не сказать, что ответ выше не работает, за исключением того, что необходима проверка нуля.

Другой способ ответить - использовать дженерики, и вы гарантированно получите Double как любой элемент items.

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

источник
9
Не могли бы вы научиться объяснять причины отрицательной оценки? Я тоже новичок в java, и я хотел бы увидеть, что не так с этим ответом, поэтому мне не нужно его пробовать!
enrey
1
Я бы избегал сравнения с жестко закодированной строкой, что, если имя класса изменится, также существует instanceof, поэтому мы его используем.
@enrey В чем преимущество этого перед instanceof?
Чарльз Шиллер,
@CharlesShiller Преимущество - позднее связывание строки «Cat».
Робино
2
+1 за то, .getClass().toString()что я не могу импортировать класс из-за односторонней зависимости. Спасибо.
Ханнес Шнайдермайер
1

Используйте регулярное выражение для достижения этой задачи. Пожалуйста, обратитесь к приведенному ниже коду.

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
Отличный пример, что такое TypeOF, кстати? в последней строке.
Эдди Кумар