我刚刚开始用Java编程,所以我还是一个菜鸟。我试图检查一个句子是否包含特定单词。这是我的代码:
public static void run(String sentence) {
System.out.print("Please provide a string");
Scanner sc = new Scanner(System.in);
String str1 = sc.next();
if(str1.contains("Andy")) {
System.out.print("V");
}
else {
System.out.print("X");
}
}
我必须运行以下测试:
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class Assignment1_3Test {
@Test
public void runTestOnlyAndy() {
char output = Assignment1_3.run("Andy");
assertEquals('V', output);
}
@Test
public void runTestNoAndy() {
char output = Assignment1_3.run("This does not contain the word An-dy");
assertEquals('X', output);
}
@Test
public void runTestNoText() {
char output = Assignment1_3.run("");
assertEquals('X', output);
}
@Test
public void runTestAndyAtTheEnd() {
char output = Assignment1_3.run("This contains the word Andy");
assertEquals('V', output);
}
@Test
public void runTestAndyMiddle() {
char output = Assignment1_3.run("This contains the word Andy in the
middle of the sentence");
assertEquals('V', output);
}
}
现在,当我运行此测试时,出现以下错误:类型不匹配:无法从void转换为char。我不知道如何解决此问题,但我认为这只是一件小事,我不知道如何解决它使我感到非常沮丧。因此,如果有人可以给我提示如何解决此问题,将不胜感激!
答案 0 :(得分:1)
将您的run
方法更改为以下方法。请注意,您没有使用string
参数。您可能应该改为重构的版本。
public static char run(String string) {
Scanner sc = new Scanner(System.in);
System.out.print("Please provide a string");
String str1 = sc.next();
if(str1.contains("Andy")) {
return 'V'
} else {
return 'X'
}
}
重构版本:
public static char containsAndy(String string) {
return string.contains("ANDY") ? 'V' : 'X';
}
如果希望您的方法易于测试,则不应阅读方法内部的句子,而应将其作为参数提供。有关示例,请参见下面的main
:
public static void main(String args[]) {
System.out.print("Please provide a string");
String sentence= sc.next();
System.out.print("Sentence contains Andy: " + containsAndy(sentence));
}