2014-09-29 40 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();