Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Double cannot be dereferenced?

Tags:

java

double

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.

like image 387
Daniel Donaldson Avatar asked Apr 23 '12 01:04

Daniel Donaldson


People also ask

What does Cannot be dereferenced mean?

If you are getting “int cannot be dereferenced” error in Java, it means that you are attempting to call a method or an attribute on a int type value.

What does Boolean Cannot be dereferenced mean?

@OP: "<primitive> cannot be deferenced" means that you're trying to call a method on a primitive data type. Those don't have any methods, so you can't do it. ( Don't confuse primitive boolean and class Boolean, btw.)


2 Answers

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.

like image 162
mwengler Avatar answered Sep 21 '22 17:09

mwengler


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

like image 25
paxdiablo Avatar answered Sep 20 '22 17:09

paxdiablo