2015-02-10 226 views
-3
public String replaceVowels(String s){ 
    String replacement = ""; 
    for(int i = 0; i <s.length(); i++){ 
     if(s.charAt(i)=='a' || s.charAt(i)=='A' || 
       s.charAt(i)=='e' || s.charAt(i)=='E'|| 
       s.charAt(i)=='i' || s.charAt(i)=='I'|| 
       s.charAt(i)=='o' || s.charAt(i)=='O'|| 
       s.charAt(i)=='u' || s.charAt(i)=='U'){ 
      replacement = replacement + '*'; 
     }else{ 
      replacement = replacement + s.charAt(i); 
     } 

    } 
    return replacement; 

}爲什麼我的junit測試在此代碼中失敗?

我想*在字符串中替換元音和這裏的代碼是我的測試代碼

@Test public void tests8(){ 
code.Solution s = new code.Solution(); 
String input = "book "; 
String expected = "b**k"; 
String actual = s.replaceVowels(input); 
assertTrue("Expected was" +expected+"but the actual was" +actual , expected == actual); 

}

的錯誤是太奇怪了,當我運行JUnit它說

預計是b * * k但實際是b * * k

我的代碼有什麼問題?

+0

你必須要在後面加上一個空格。所以replaceVowels返回''b ** k「'但你期望''b ** k」'。 – immibis 2015-02-10 22:38:03

+1

投票結束這是一個簡單的印刷錯誤。 – immibis 2015-02-10 22:38:52

+0

即使空間被刪除,你將需要使用['expected.equals(實際)'](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) (或者使用'assertEquals'來代替)。 – rgettman 2015-02-10 22:40:58

回答

0

你應該使用assertEquals(String, Object, Object),因爲你需要比較兩個字符串的值,而不是他們的身份。

(你可能不需要您的自定義信息的任何更多,如果你這樣做)

0

"b**k "刪除尾隨的空間,還可以使用string.equals(String other)功能比較字符串,而不是==操作。 ==只在比較字符串文字時才起作用,因爲它們將指向相同的對象。

+0

因此,例如,如果我改變了這種方法s.charAt(ⅰ)==「」上。結果將是s.chatAt(i).equals(a)?是對的嗎? – QifengSun 2015-02-11 02:44:58

+0

是,由於焦炭基本上是一個數,你可以用任何一種方式 – 2015-02-11 11:31:10

0

除了@immibis提到了錯字,你的測試用例上寫着: assertTrue("Expected was" +expected+"but the actual was" +actual , expected == actual);

它應該閱讀: assertTrue("Expected was" +expected+"but the actual was" +actual , expected.equals(actual));

==是不一樣的.equals(I)

==手段是他們相同的實例,而.equals()意味着它們具有相同的內容。

+2

使用'代碼格式對它們進行比較,而不是{} – immibis 2015-02-10 22:46:04