Double cannot be dereferenced?

2020-01-27 06:43发布

问题:

String mins = minsField.getText(); 

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

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

    double hours = Mins / 60;

    hours.setText(hoursminsfield);

The problem is that Double cannot be dereferenced.

回答1:

EDIT 4/23/12

double cannot be dereferenced is the error some Java compilers give when you try to call a method on a primitive. It seems to me double has no such method would be more helpful, but what do I know.

From your code, it seems you think you can copy a text representation of hours into hoursminfield by doing hours.setText(hoursminfield); This has a few errors: 1) hours is a double which is a primitive type, there are NO methods you can call on it. This is what gives you the error you asked about. 2) you don't say what type hoursminfield is, maybe you haven't even declared it yet. 3) it is unusual to set the value of a variable by having it be the argument to a method. It happens sometimes, but not usually.

The lines of code that do what you seem to want are:

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); 

ORIGINAL ANSWER (addressed a different problem in your code):

In double hours = Mins / 60; you are dividing two ints. You will get the int value of that division, so if Mins = 43; double hours = Mins / 60; // Mins / 60 is an int = 0. assigning it to double hours makes // hours a double equal to zero.

What you need to do is:

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

or something like that, you need to cast some part of your division to a double in order to force the division to be done with doubles and not ints.



回答2:

You haven't specified the language but, if it's Java, there's a big difference between the basic type double and the class Double.

In any case, your setText seems the wrong way around. The setText method would belong to the data field, not the data you're trying to put in there:

hoursminsfield.setText (hours);

In other words, you want to set the text of the field, using the double you just calculated. Whether you can pass a double is a different matter which may need to be examined.

Another thing:

double hours = Mins / 60;

will, if Mins is an integer`, give you an integer value which you then put into a double. That means it will be truncated. If you want to ensure you keep precision following the division, you can use something like:

double hours = (double) Mins / 60.0;

(though it may work with only one of those changes, I prefer to make all terms explicit).



回答3:

How about this way

double hours = Mins / 60.0

I always use the above statement to get the double value



标签: java double