Descobrir se um número é duplo em Java


92

Sou um novato em Java. Estou tentando descobrir se um número é um duplo com algo assim:

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

Agradeceria se alguém pudesse me dizer como reorganizar a sintaxe para fazer isso funcionar corretamente.


Sou apenas eu ou typeof (object) não é realmente real em C #? Sempre pensei que fosse typeof (type) ... object o = new object(); Type t = typeof(o);lança um erro do compilador dizendo o is a variable but is used like a type. O nome desta pergunta é equivocado ...
Dan Rayson

Em c #, todos os objetos têm um Object#GetType()método, que retorna a Type. Isso pode então ser usado para comparar typeof(). Nesse caso, seria items.elementAt(1).GetType() == typeof(double).
Frontear de

Respostas:


154

Experimente isto:

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

19
+1. Também estou pensando que você realmente deseja verificar elementAt(0); a maioria das coisas em Java é baseada em zero.
ChssPly76

16

Visto que esta é a primeira pergunta do Google, adicionarei a typeofalternativa de estilo JavaScript aqui também:

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

9

A reflexão é mais lenta, mas funciona para uma situação em que você deseja saber se é do tipo Cão ou Gato e não uma instância de Animal. Então você faria algo como:

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

Não dizer que a resposta acima não funciona, exceto que a parte de verificação nula é necessária.

Outra maneira de responder a isso é usar genéricos e você terá a garantia de ter Double como qualquer elemento dos itens.

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

9
Você poderia, por favor, aprender a explicar as razões para a avaliação negativa? Também sou novo em java e gostaria de ver o que há de errado com essa resposta, então não preciso tentar!
enrey

1
Eu evitaria comparar com uma string codificada, e se o nome da classe mudar, também existe instanceof, então usamos isso.

@enrey Qual é a vantagem deste sobre instanceof?
Charles Shiller

@CharlesShiller A vantagem é a vinculação tardia da string "Cat".
Robino

2
+1 .getClass().toString()porque não consigo importar a classe devido à inejction de dependência unilateral. THX.
Hannes Schneidermayer

1

Use a expressão regular para realizar esta tarefa. Por favor, consulte o código abaixo.

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
Ótimo exemplo, o que é 'TypeOF' btw? na última linha.
Eddie Kumar
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.