2015-02-10 178 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