Déterminer si un nombre est un double en Java

92

Je suis un débutant en Java. J'essaie de déterminer si un nombre est un double avec quelque chose comme ceci:

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

J'apprécierais si quelqu'un pouvait me dire comment réorganiser la syntaxe pour que cela fonctionne correctement.

Nicolas Raoul
la source
Est-ce juste moi, ou typeof (objet) n'est-il pas réellement réel en C #? J'ai toujours pensé que c'était typeof (type) ... object o = new object(); Type t = typeof(o);lance une erreur de compilation en disant o is a variable but is used like a type. Le nom de cette question est erroné ...
Dan Rayson
En c #, tous les objets ont une Object#GetType()méthode, qui renvoie un Type. Cela peut ensuite être utilisé pour comparer avec typeof(). Dans ce cas, ce serait le cas items.elementAt(1).GetType() == typeof(double).
Frontear

Réponses:

154

Essaye ça:

if (items.elementAt(1) instanceof Double) {
   sum.add( i, items.elementAt(1));
}
ski
la source
19
+1. Je pense aussi que vous voulez vraiment vérifier elementAt(0); la majorité des éléments en Java sont basés sur zéro.
ChssPly76
16

Puisqu'il s'agit de la première question de Google, j'ajouterai typeofégalement ici l'alternative au style JavaScript :

myObject.getClass().getName() // String
Rob Fox
la source
9

La réflexion est plus lente, mais fonctionne pour une situation où vous voulez savoir si c'est de type Chien ou Chat et non une instance d'Animal. Vous feriez donc quelque chose comme:

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

Ne pas dire la réponse ci-dessus ne fonctionne pas, sauf que la partie de vérification nulle est nécessaire.

Une autre façon de répondre est d'utiliser des génériques et vous êtes assuré d'avoir Double comme n'importe quel élément des éléments.

List<Double> items = new ArrayList<Double>();
Chookoos
la source
9
Pourriez-vous s'il vous plaît les gens apprendre à expliquer les raisons d'une évaluation négative? Je suis aussi nouveau en Java et j'aimerais voir ce qui ne va pas avec cette réponse pour ne pas avoir à l'essayer!
enrey
1
J'éviterais de comparer à une chaîne codée en dur, que se passe-t-il si le nom de la classe change, aussi instanceof existe donc nous l'utilisons.
@enrey Quel est l'avantage de cela sur instanceof?
Charles Shiller
@CharlesShiller L'avantage est la liaison tardive de la chaîne "Cat".
Robino
2
+1 .getClass().toString()car je ne peux pas importer la classe en raison d'une inejction de dépendance à sens unique. THX.
Hannes Schneidermayer
1

Utilisez une expression régulière pour accomplir cette tâche. Veuillez vous référer au code ci-dessous.

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
la source
1
Excellent exemple, qu'est-ce que «TypeOF» btw? en dernière ligne.
Eddie Kumar