双精度不能取消引用?编辑 2012年4月23日原始答案(解决了代码中的其他问题):

2022-09-03 13:13:32
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


答案 1

编辑 2012年4月23日

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

从你的代码中,似乎你认为你可以通过做hourtime.setText(hoursminfield)将 的文本表示形式复制到中;这有几个错误:1)小时是一个基元类型,没有方法可以调用它。这就是您所询问的错误。2)你没有说小时明田是什么类型,也许你甚至还没有宣布它。3)通过将变量作为方法的参数来设置变量的值是不寻常的。它有时会发生,但通常不会发生。hourshoursminfielddouble

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

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

原始答案(解决了代码中的其他问题):

在你身上,你被分成两个s。你会得到这个除法的值,所以如果Mins = 43;双倍小时 = 分钟 / 60;Mins / 60 是 int = 0。将其分配为双小时会使 // 小时为等于零的双倍。double hours = Mins / 60;intint

您需要做的是:

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

或类似的东西,你需要把你的师的某个部分扔给a,以迫使师以s而不是s来完成。doubledoubleint


答案 2

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

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

hoursminsfield.setText (hours);

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

另一件事:

double hours = Mins / 60;

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

double hours = (double) Mins / 60.0;

(尽管它可能只适用于其中一个更改,但我更喜欢明确所有术语)。


推荐