2016-02-13 46 views
0

我试图在Java中使用以下方法进行温度转换。问题是当我打电话的方法,我得到一个"double cannot be dereferenced"错误。Java“双不能解除引用”错误 - 双数据类型的调用方法

据我所知,原因是方法无法在原始数据类型上调用,我认为解决方案是使用包装,但我不知道该代码是什么样子(我最初尝试使用Double包装器所有产生的错误)。

public double celsius(double f) {   
    return (f - 32.0)/1.8; 
} 

public double fahrenheit(double c) {   
    return c * 1.8 + 32.0; 
} 

public void doConversion() { 
    double tempC = 0.0; 
    double tempF = tempC.fahrenheit; // double cannot be dereferenced error 
} 

回答

1

你已经在你的类中定义的方法。在做转换时,你只需要调用下面的方法:

public void doConversion() { 
    double tempC = 0.0; 
    double tempF = fahrenheit(tempC); 
} 

希望这有助于!

2

而不是

double tempF = tempC.fahrenheit; 

使用

double tempF = fahrenheit(tempC); 
+0

它应该是'=' – roottraveller

+0

糟糕,错字。 '='和'-'彼此相邻。谢谢。 –

+0

谢谢。很有帮助。我不知道如何调用某种方法(Java新手)。 –

2

做这样的事情:

public class temperature{ 
    public double T; //in C 

    public temperature(double T){ 
     this.T = T; 
    } 

    public double getC(){ 
     return T; 
    } 

    public double getF(){ 
     return T * 1.8 + 32.0; 
    } 
} 
1

为您的代码工作,你需要:

public void doConversion() { 
    double tempC = 0.0; 
    double tempF = fahrenheit(tempC); // call your function 
} 

原因double tempF = tempC.fahrenheit;是一个问题是,.(即点)是指允许类和对象访问其成员字段和方法。

double类型的变量是原语类型;它不是一个类或一个对象,所以点运算符不能与它们一起使用。

消息传递中的措词是因为类和它们的实例(即对象)始终是引用。换句话说,如果你这样做:

List<DisplayMode> displayModes = new ArrayList<>(); 

变量displayModes持有引用(即点)的名单,但不在名单本身。然后,您可以执行如下操作:displayModes.add(new DisplayMode(...));

请注意,您需要使用new运算符来处理类,但不能使用基元。

在另一方面,如果你写:

int x = 5; 

变量x是本身的价值。

如果你真的想用点运算符,然后再考虑是这样的:

Temperature temp = new Celsius(0.0); 
System.out.println(temp.toFahrenheit().toString()); 

假设你有一个接口称为Temperature有至少一个方法叫做toFahrenheit()和具体的类CelsiusFahrenheit表示接口实现

public interface Temperature { 
    Temperature toFahrenheiht(); 
} 

public class Celsius implements Temperature { 
    // ... 
} 
+0

谢谢。有用和彻底的答案。 –

+0

@ Craig90:我们通常会说在这里通过投票回答来感谢你:) – ray

+0

我确实提高了你的答案,但是因为我是Stack Overflow的新手,所以我没有足够的声望来注册我的upvote。一旦我达到15的声望,upvote就会出现。因为upvote不会立即出现,所以我写了一封感谢评论。 –