Double不能被解引用?

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 无法被解引用


2
@Daniel,我不明白被接受的答案与你的问题有任何关系。当你解决原始问题时,应该提出另一个问题。 - paxdiablo
如果您想使用double作为小时数,您必须离开int算术,因为如果您将int与字面int(如60)混合使用,则会使用int算术:double hours = Mins / 60;。请改用字面值double,例如60.0。 - user unknown
请不要在变量 int Mins; 中使用大写字母,将其改为 int minutesint mints。其他程序员会误解它,他们会认为 Mins 是一个类而不是一个变量。请阅读此命名约定 - Crazenezz
3个回答

23

修改于4/23/12

double不能被间接引用是一些Java编译器在你试图调用一个原始类型方法时给出的错误。对我来说,double没有这样的方法可能更有帮助,但我知道什么呢。

从你的代码中看来,你认为通过执行 hours.setText(hoursminfield); 就可以将hours的文本表示复制到hoursminfield中。这有几个错误: 1) hours是一个原始类型的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;中,你正在将两个int相除。你会得到该除法的int值,所以如果 Mins = 43; double hours = Mins / 60; // Mins / 60 是一个int = 0。 将它分配给double hours // 将使hours成为等于零的double。

你需要做的是:

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

如果要执行类似的操作,你需要将除法的某个部分强制转换为double类型,以便使用double而不是int进行除法运算。


我还有一个问题需要解决,如果您能给我一些建议,那就太棒了,非常感谢。 - Daniel Donaldson
1
这太棒了,一个被接受的答案是正确的,但我正在遭到贬低!也许你们中的一位强大的用户可以告诉我为什么要贬低我。 - mwengler
2
@mwengler,实际上这并没有回答问题。问题是关于导致错误“Double cannot be dereferenced”的原因。你的答案被接受这一事实是无关紧要的(实际上只会更加引人注目,因为它是不正确的)。 - Chris Cain
@Zshazz 我想专家们比提问者更清楚谁回答了他的问题。下次在回答问题之前,我会先编辑问题,确保理解提问者真正的意思。 - mwengler

2

你没有指定语言,但如果是Java,基本类型double和类Double 之间存在很大差异。

无论如何,你的setText方法似乎是错误的。 setText方法应该属于数据字段,而不是你要放置的数据:

hoursminsfield.setText (hours);

换句话说,您想使用刚刚计算出的double设置字段的文本。能否传递double是一个不同的问题,可能需要进行检查。

另一件事:

double hours = Mins / 60;

如果Mins是整数,那么它将会给你一个整数的值,你需要将它放到一个双精度浮点数中。这意味着它将被截断。如果你想保持除法后的精度,你可以使用类似以下的代码:

double hours = (double) Mins / 60.0;

尽管只进行其中一项更改可能会起作用,但我更喜欢使所有术语都明确。


是的,很抱歉我用了Java,但你能告诉我如何修复这个问题吗?拜托了?哈哈 - Daniel Donaldson
2
他们确实这样做了。您不能在Double上调用setText,因为Double仅是一个数字。它没有setText方法,因为它没有任何文本... - Mark Reed
啊,好的,我明白了。那你能建议我该怎么做吗?因为我对这个还很新,几乎不知道该怎么做。 - Daniel Donaldson
我还有一个问题需要解决,如果您能给我一些建议,那就太棒了,非常感谢。 - Daniel Donaldson
2
@Daniel,SO不是留言板。如果你有其他问题,请提出另一个问题。 - paxdiablo
显示剩余3条评论

1

这种方式怎么样?

double hours = Mins / 60.0

我经常使用上述语句来获取双精度值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接