web-dev-qa-db-fra.com

Double ne peut pas être déréférencé?

String mins = minsField.getText(); 

    int Mins;
    try
    {
        Mins = Integer.parseInt(mins);

     }
     catch (NumberFormatException e)
     {
         Mins = 0;
     }

    double hours = Mins / 60;

    hours.setText(hoursminsfield);

Le problème est que Double cannot be dereferenced.

7
Daniel Donaldson

EDIT 4/23/12

double cannot be dereferenced est l'erreur que certains compilateurs Java donnent lorsque vous essayez d'appeler une méthode sur une primitive. Il me semble que double has no such method serait plus utile, mais que sais-je?.

D'après votre code, il semble que vous pensiez pouvoir copier une représentation textuelle de hours dans hoursminfield en effectuant Hours.setText (hoursminfield); Cela comporte quelques erreurs: 1) heures est une double qui est un type primitif, il n'y a AUCUNE méthode que vous puissiez appeler. C’est ce qui vous donne l’erreur à propos de laquelle vous avez posé la question. 2) vous ne dites pas quel type est hoursminfield, peut-être que vous ne l’avez même pas encore déclaré. 3) il est inhabituel de définir la valeur d'une variable en ayant l'argument d'une méthode. Cela arrive parfois, mais pas habituellement.

Les lignes de code qui font ce que vous semblez vouloir sont:

String hoursrminfield; // you better declare any variable you are using

// wrap hours in a Double, then use toString() on that Double
hoursminfield = Double.valueOf(hours).toString(); 

// or else a different way to wrap in a double using the Double constructor:
(new Double(hours)).toString(); 

// or else use the very helpful valueOf() method from the class String which will 
// create a string version of any primitive type:
hoursminfield = String.valueOf(hours); 

RÉPONSE ORIGINALE (a résolu un problème différent dans votre code):

Dans double hours = Mins / 60;, vous divisez deux ints. Vous obtiendrez la valeur int de cette division, donc si Minutes = 43; Double heures = minutes/60; // minutes/60 est un entier = 0. assigning le fait de doubler les heures fait que // heures est un double égal à zéro.

Ce que vous devez faire c'est:

double hours = Mins / ((double) 60);

ou quelque chose comme ça, vous devez transformer une partie de votre division en double afin de forcer la division à se faire avec doubles et non ints.

15
mwengler

Vous n'avez pas spécifié le langage, mais s'il s'agit de Java, il existe une grande différence entre le type de base double et la classe Double.

Dans tous les cas, votre setText semble le mauvais sens. La méthode setText appartiendrait au champ data, pas aux données que vous essayez d'introduire ici:

hoursminsfield.setText (hours);

En d'autres termes, vous souhaitez définir le texte du champ en utilisant le double que vous venez de calculer. Que vous puissiez réussir un double est une question différente qui peut doit être examinée.

Autre chose:

double hours = Mins / 60;

va, si Mins est un entier`, vous donner un entier valeur que vous mettez ensuite dans un double. Cela signifie qu'il sera tronqué. Si vous voulez vous assurer de garder la précision après la division, vous pouvez utiliser quelque chose comme:

double hours = (double) Mins / 60.0;

(Bien que cela ne fonctionne qu'avec un seul de ces changements, je préfère expliciter tous les termes).

2
paxdiablo

Que diriez-vous de cette façon

double hours = Mins / 60.0

J'utilise toujours la déclaration ci-dessus pour obtenir la double valeur 

0
wangzhiju