无法从void转换为char

时间:2018-10-31 14:50:48

标签: java

我刚刚开始用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。我不知道如何解决此问题,但我认为这只是一件小事,我不知道如何解决它使我感到非常沮丧。因此,如果有人可以给我提示如何解决此问题,将不胜感激!

1 个答案:

答案 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)); 
}