Java 将扫描仪与字符串进行比较

Java 将扫描仪与字符串进行比较,java,string,compare,Java,String,Compare,我试图要求用户输入一个字符(“y”/“n”),并检查这是否是正确答案。我得到以下错误:“不可比较的类型:java.util.Scanner和java.lang.String” 是的,因为扫描仪是获取输入的一种方式,而不是值本身。您希望从输入中获取下一个值,然后进行比较。大概是这样的: String answer = scanner.next(); if (answer.equals("y")) { ... } else if (answer.equals("n")) { ...

我试图要求用户输入一个字符(“y”/“n”),并检查这是否是正确答案。我得到以下错误:“不可比较的类型:java.util.Scanner和java.lang.String”



是的,因为扫描仪是获取输入的一种方式,而不是值本身。您希望从输入中获取下一个值,然后进行比较。大概是这样的:

String answer = scanner.next();
if (answer.equals("y")) {
    ...
} else if (answer.equals("n")) {
    ...
}

请注意,通常(包括本例)不应将字符串与
=
进行比较,因为这会比较两个操作数是否引用完全相同的字符串对象-您只关心它们是否引用相同的对象。(有关更多详细信息,请参阅。)

是的,因为扫描仪是获取输入的一种方式,而不是值本身。您希望从输入中获取下一个值,然后进行比较。大概是这样的:

String answer = scanner.next();
if (answer.equals("y")) {
    ...
} else if (answer.equals("n")) {
    ...
}

请注意,通常(包括本例)不应将字符串与
=
进行比较,因为这会比较两个操作数是否引用完全相同的字符串对象-您只关心它们是否引用相同的对象。(有关更多详细信息,请参阅。)

我认为您应该首先从扫描仪获取字符串(通过next()可能?)。然后在您的方法中,不要使用“==”作为字符串比较器。

我认为您应该首先从扫描仪获取字符串(可能通过next()获取)。然后在您的方法中,不要使用“==”作为字符串比较器。

我已经修改了您的代码,还没有测试过它,但它应该可以工作:

 Scanner userInput = new Scanner(System.in);

System.out.println("Is this word spelled correctly?:" + wordToCheck);
        rightCheck(userInput.next());//send the string rather than the scanner

public boolean rightCheck(String usersAnswer)//convert the parameter type to String
{
    if(usersAnswer == "y")
    {
        //"Correct!"
        //Increment User's Score
    }
    else
    {
        //"Incorrect"
        //Decrement User's Score
    }
}

我已经修改了您的代码,尚未对其进行测试,但它应该可以工作:

 Scanner userInput = new Scanner(System.in);

System.out.println("Is this word spelled correctly?:" + wordToCheck);
        rightCheck(userInput.next());//send the string rather than the scanner

public boolean rightCheck(String usersAnswer)//convert the parameter type to String
{
    if(usersAnswer == "y")
    {
        //"Correct!"
        //Increment User's Score
    }
    else
    {
        //"Incorrect"
        //Decrement User's Score
    }
}

您可以通过切换
equals
“y”的参数来减少程序出错的可能性。equals(answer)
如果
answer
null
@cIph3r:
Scanner,则不会引发
NullPointerException
。next()
永远不会返回null,因此这里不需要这样做。如果它真的返回null,那就表明有些东西已经坏了——所以我宁愿通过一个异常来了解它,也不愿在一个破碎的世界里继续下去。I对于
scanner.next()
,不存在空值。但总的来说,这可以防止此类错误。@cIph3r:我的观点是,它可以防止错误,但在其他情况下,它会传播错误。您应该始终知道您是否期望字符串可以为null,并根据该假设决定要做什么。如果这个假设是错误的,我宁愿早一点知道也不要晚一点。你可以通过切换
equals
“y”的参数来减少程序出错的可能性。equals(answer)
如果
answer
is
null
@cIph3r:
Scanner.next()
从不返回null,因此这里不需要这样做。如果它真的返回null,那就表明有些东西已经坏了——所以我宁愿通过一个异常来了解它,也不愿在一个破碎的世界里继续下去。I对于
scanner.next()
,不存在空值。但总的来说,这可以防止此类错误。@cIph3r:我的观点是,它可以防止错误,但在其他情况下,它会传播错误。您应该始终知道您是否期望字符串可以为null,并根据该假设决定要做什么。如果这个假设是错误的,我宁愿早点知道也不愿晚知道。