2014-09-04 107 views
1

我寫了如下簡單的代碼。基本上在setString,我輸入「句子」作爲字符串,並在getString,它應該返回字符串。當我在Junit中測試時,它說getString返回null而不是「句子」。Java代碼返回null而不是字符串

public class MyString implements MyStringInterface{ 
    public String str; 

    //Sets the value of the current string 
    public void setString(String str){ 
     str = "Sentence"; 
    } 

    // Returns the current string 
    public String getString(){ 
     return str; 
    } 
} 
+0

您應該使用一個IDE。 – 2014-09-04 02:35:42

回答

0

的問題是setString()應該

public void setString(String str){ 
     this.str = str; 
    } 

然後你需要從你的主要方法

MyString s = new MyString(); 
s.setString("Sentence"); 
+0

感謝您的評論。我必須先創建一個接口,然後開發一個實現接口的類。然後我需要在Junit中創建測試用例來測試程序。我的問題是:主要方法在哪裏?由於我使用Junit,我相信我們不會創建主要方法。在那種情況下,我應該從哪裏獲得用於從主方法調用的代碼? – javabeginner 2014-09-04 02:46:23

5
public void setString(String str){ 
    str = "Sentence"; 
} 

調用在你的代碼,當你調用str = "Sentence"你實際上是改變當地的變數。

在您的setString方法中,您將值設置爲方法局部變量,而不是實例變量。所以你的實例變量值不會被改變,並且它的默認值是null。 你可以改變你的方法如下

public void setString(String str){ 
    this.str = "Sentence"; // this.str = str; 
} 

P.S

在你的代碼被設置在setter方法修復價值。這是一個非常糟糕的做法,你不需要有一個做這樣的事情的二傳手。

+0

@javabeginner記住它不是使用setter方法的正確方法。如果str將具有固定值。爲它創建setter方法沒有意義。 Setter方法意味着允許更改實例字段的值 – Bren 2014-09-04 02:36:25

0
public void setString(String str){ 
     str = "Sentence"; 
    } 

此處「STR」在方法體指的是被作爲參數傳遞給該方法的字符串變量「STR」。如果您有一個與參數名稱相同的實例變量,則使用

this.str = str; 

「this」指向self,因此this.str指實例變量。在上面的例子中,我們覆蓋了變量,因此值沒有被設置爲實例變量。

否則,你可以做如下:

public void setString(String formalParamStr){ 
     str = formalParamStr; 
    } 

現在所說的方法如下:

instanceVar.setString("Sentence"); 
相關問題