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
.
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.
@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.)
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);
In double hours = Mins / 60;
you are dividing two int
s. 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 double
s and not int
s.
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).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With