15
String mins = minsField.getText(); 

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

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

    double hours = Mins / 60;

    hours.setText(hoursminsfield);

问题是Double cannot be dereferenced

4

3 回答 3

22

编辑 2012 年 4 月 23 日

double cannot be dereferenced是一些 Java 编译器在您尝试调用原语上的方法时给出的错误。在我看来double has no such method会更有帮助,但我知道什么。

从您的代码中,您似乎认为可以通过 hours.setText(hoursminfield);hours复制一个文本表示。hoursminfield这有一些错误:1)小时是double一个原始类型,没有可以调用的方法。这就是给您所询问的错误的原因。2)您没有说 hoursminfield 是什么类型,也许您甚至还没有声明它。3)通过将变量作为方法的参数来设置变量的值是不寻常的。它有时会发生,但通常不会。

执行您似乎想要的代码行是:

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

原始答案(解决了代码中的另一个问题):

double hours = Mins / 60;你划分两个ints。您将获得该int除法的值,因此如果 Mins = 43; 双小时 = 分钟 / 60;// Mins / 60 是一个 int = 0。将其分配给 double hours 使得 // hours 为 double 等于 0。

你需要做的是:

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

或类似的东西,您需要将除法的某些部分转换为 adouble以强制使用doubles 而不是ints 来完成除法。

于 2012-04-23T02:25:09.257 回答
2

您尚未指定语言,但如果是 Java,则基本类型double和 class之间存在很大差异Double

无论如何,您setText的方法似乎是错误的。该setText方法将属于数据字段,而不是您尝试放入其中的数据:

hoursminsfield.setText (hours);

换句话说,您想设置字段的文本,使用您刚刚计算的双精度值。你是否可以通过双打是另一回事,可能需要检查。

另一件事:

double hours = Mins / 60;

将,如果Mins是一个整数`,给你一个数值,然后你把它放入一个双精度。这意味着它将被截断。如果要确保在除法之后保持精度,可以使用以下内容:

double hours = (double) Mins / 60.0;

(尽管它可能只适用于其中一项更改,但我更愿意明确所有条款)。

于 2012-04-23T02:04:01.157 回答
0

这种方式怎么样

double hours = Mins / 60.0

我总是使用上面的语句来获取双精度值

于 2012-04-23T04:20:56.567 回答