2014-09-29 36 views
0
class temperature { 
    public double degrees = 0; 
    public boolean isCelcius = false; 

    public double returnDegrees(){ 
     return this.degrees; 
    } 

    public void setTemperature(double temeperatureT, boolean isCelciusT){ 
     this.degrees = temeperatureT; 
     this.isCelcius = isCelciusT; 
    } 

    public void convertToC(){ 
     if (this.isCelcius == false) { 
      this.degrees = (5 * (degrees - 32))/9; 
      this.isCelcius = true; 
     } 
     return; 
    } 

    public void convertToF(){ 
     if (this.isCelcius == true){ 
      this.degrees = ((9 * degrees)/5) + 32; 
      this.isCelcius = false; 
     } 
     return; 
    } 
} 



public static temperature convertStringToTemperature(String tempString){ 
     temperature tempTemp; 
     String split[] = tempString.split(" "); 
     tempTemp.degrees = Double.parseDouble(split[0]) 
     if (split[1] == "F") 
      tempTemp.isCelcius = false; 
     else if(split[1] == "C") 
      tempTemp.isCelcius = true; 
     else{ 
      System.out.println("error determining units"); 
      tempTemp.isCelcius = true; 
     } 

     return tempTemp; 
    } 

对于代码:如何初始化我在Java中创建的变量?

>tempTemp.setTemperature(Double.parseDouble(split[0]), true); 

它说,该变量tempTemp可能没有,虽然它并没有说在它下面该变量的其他用途进行初始化。我的问题在这里?

谢谢,这是我第一次在java中进行自定义类。

+4

'温度tempTemp =新的温度();' – resueman 2014-09-29 20:50:29

+2

强制性阿里纳斯 - Java的命名约定使用'PascalCase'类的名称。 – 2014-09-29 20:52:14

+0

顺便说一句,在命名类时总是使用大写的第一个字母。当你确定的时候,你也可以指定一个'null',在使用一个字段之前,它会被某个语句初始化,但是编译器很快乐。 – 2014-09-29 20:52:30

回答

1

那是因为你只创建了一个对象的引用而没有创建对象本身。

temperature tempTemp = new temperature(); 

现在引用被初始化为指向一个真实的对象。

1

temperature tempTemp;只是创建局部变量,但不指向/指向任何对象或没有分配任何值。在对象上调用方法之前,您需要获取对象的句柄(引用)。

temperature tempTemp = new temperature(); 

创建一个局部变量和tempTemp这个变量是指/分的温度和对象上时执行tempString.split(" ");下一行,分割方法被调用先前行创建的对象上。

请注意,您甚至可以用null初始化tempTemp变量,但是这会在下一行中导致NullPointerException。

0

在生产线

temperature temptemp; 

您声明了一个名为temperaturetemptemp变量。但是,您并未初始化它。你上面实例temperature并分配从实例化temptemp,这是temperature类产生的对象

temperature temptemp = new temperature(); 

代码:您可以通过它关联到一个对象,像这样的初始化。所以这行声明你的变量并初始化它。如果你不指定你的对象是什么,你的意图不能被猜出。

0

因为tempTemp未在convertStringToTemperature方法内初始化。

这是一个内置的功能,Java语言具有 - 这可以确保变量或对象在可以使用之前被初始化。

在你的情况下,tempTemptemperature类的实例是convertStringToTemperature方法的本地方法,并且没有初始化。

而且,对于局部变量也是如此。尝试在你的方法中定义一个原始类型而不需要初始化,并对其进行简单的数学运算。您将从Java编译器中获得相同的error

此外,开始Java类别/类型的名称带有大写字母,对于其他任何东西跟随骆驼外壳已在其他答案中指出。

0
  1. 如果在同一个类的方法convertStringToTemperature那么你可以使用this.setTemperature(),但你的方法不能在这种情况下,静态的。因为你不能在静态上下文中使用“this”。

  2. 如果在不同的类需要初始化你的温度对象,或者您可以在参数传递温度的物体,像波纹管你convertStringToTemperature方法:

public static temperature convertStringToTemperature(String tempString,temperature tempTemp){

  //temperature tempTemp = new temperature();    
     String split[] = tempString.split(" "); 
     tempTemp.degrees = Double.parseDouble(split[0]); 
     if (split[1] == "F") 
      tempTemp.isCelcius = false; 
     else if(split[1] == "C") 
      tempTemp.isCelcius = true; 
     else{ 
      System.out.println("error determining units"); 
      tempTemp.isCelcius = true; 
     } 

     return tempTemp; 
    } 

1

在生产线

temperature tempTemp; 

您只能创建变量,但您仍需要初始化它。为了初始化它,你需要把它分配给一个对象,如

temperature tempTemp = new temperature();