Java 无法从void转换为char

Java 无法从void转换为char,java,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"))

我刚开始用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。我不知道如何解决这个问题,但我认为这只是一件小事,我真的很沮丧,因为我不知道如何解决它。所以,如果有人能告诉我如何解决这个问题,我将不胜感激

将您的
run
方法更改为下面的方法。请注意,您没有使用
字符串
参数。您可能应该改为重构到重构版本

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

您已经学会了如何
返回
东西了吗?更具体地说,
运行
方法只会打印到控制台,不能分配给方法之外的变量
公共静态无效
的标准签名,但请记住
无效
意味着“不返回任何内容”因此,您不能将该方法的结果分配给任何变量。将返回类型从
void
更改为
char
,然后返回一个值,而不是打印它。您好,先生,这看起来确实是我问题的答案。但是现在测试没有完成,好像我的代码没有像下面这些句子那样读取从测试中获得的输入(“这不包含单词An dy”)。@Jansen你确定你的测试没有在
String str1=sc.next()处等待输入吗?如果是,则提供输入或重构到
重构版本
。测试是否已经使用这行代码提供输入:
char output=Assignment1_3.run(“这包含单词Andy”)?确实如此,但您的测试方法在
String str1=sc.next()处阻塞并等待来自控制台的输入。我想这就是为什么你的测试没有完成。但是我的方法如何从测试中获得输入呢?因为我认为这是正确的方法,但显然不是:)