当前位置: 首页 > 知识库问答 >
问题:

Java为什么扫描仪无法识别用户输入[重复]

邹举
2023-03-14

我编写了一个函数来接收用户输入。找不到正确答案。总是失败。我现在疯了。

public String getChoice() {
    Scanner SC = new Scanner(System.in); 
    System.out.print("Ready to play? (Y/N) ");
    String playChoice = SC.next();    // Input Y or N
    playChoice = playChoice.replace("\n", "");
    System.out.println("Input length is: " + playChoice.length());
    System.out.println(playChoice);
    if (playChoice == "N") {
        SC.close();
        return "Success N";
    }
    else if (playChoice == "Y") {
        SC.close();
        return "Success Y";
    }
    SC.close();
    return "Failure"; // Always this one works
}

共有2个答案

束敏学
2023-03-14

@Bialomazur已经给出了一个解释,下面是一些更简洁的代码和提示。

实际上,关闭扫描仪不是一个好的做法,但如果你决定,你可以在一个地方关闭它,因为你不再使用扫描仪。而且,这里的开关看起来更好

public String getChoice() {
    Scanner SC = new Scanner(System.in);
    System.out.print("Ready to play? (Y/N) ");
    String playChoice = SC.next();    // Input Y or N
    playChoice = playChoice.replace("\n", "");
    System.out.println("Input length is: " + playChoice.length());
    System.out.println(playChoice);
    SC.close();
    switch (playChoice) {
        case "Y":
            return "Success Y";
        case "N":
            return "Success N";
        default:
            return "Failure";
    }
}
云何平
2023-03-14

试试这个:

 public String getChoice() {
        Scanner SC = new Scanner(System.in);
        System.out.print("Ready to play? (Y/N) ");
        String playChoice = SC.next();    // Input Y or N
        playChoice = playChoice.replace("\n", "");
        if (playChoice.equals("N")) { // Replace operator '==' with 'equals()' method.
            SC.close();
            return "Success N";
        } else if (playChoice.equals("Y")) { // Same here.
            SC.close();
            return "Success Y";
        }
        SC.close();
        return "Failure"; // Always this one works
    }

代码未按预期工作的原因是,==运算符比较两个比较的对象引用是否指向同一对象。在if语句中显然不是这样,因此这些表达式的计算结果总是false

另一方面,equals()方法实际上比较了给定对象的内容,从而提供了所需的结果。

 类似资料:
  • 我正在使用Java的扫描仪读取用户输入。如果我只使用nextLine一次,它可以正常工作。对于两个nextLine,第一个不等待用户输入字符串(第二个)。 输出: X:Y:(等待输入) 我的代码 你知道为什么会发生这种事吗?谢谢

  • 问题内容: 对于Java练习,我试图创建一个程序,该程序从键盘读取整数,直到输入负数为止。 并打印整数的最大值和最小值,而忽略负数。 一旦运行,是否可以在同一程序中进行连续输入?我必须每次都继续运行该程序以输入数字。 任何帮助,将不胜感激 这是我的代码的一部分-它可以工作,但是我认为有一种更简单的方法可以执行我想要的操作,但不确定如何操作! 问题答案:

  • 对于java实践,我正在尝试创建一个程序,从键盘读取整数,直到输入负数。 它打印整数的最大值和最小值,忽略负数。 是否有一种方法可以在同一个程序运行后继续输入?每次输入一个数字,我都要继续运行程序。 任何帮助将不胜感激 这是我的代码的一部分-它可以工作,但我认为有一种更简单的方法可以做我想做的事情,但不确定如何做!

  • 因此,我是一个新的Java程序员,我正试图弄清楚为什么一段代码不能工作。我遇到的问题是“String interests=input.nextLine();”这一行,它跳过了用户的输入并跳转到下一个System.out,所以它只显示“Your Profile...”。在允许用户输入任何数据之前。抱歉,如果这是一个愚蠢的问题,我是很新的!

  • 问题内容: 我不明白为什么第15行不做任何输入,将不胜感激:3 输出量 请输入您的问题的第一个数字!2552所以您选择了2552选择您的第二个数字41您选择了第二个数字41现在输入ur运算符 由于某种原因,输出在最后一行结束并停止,并且不接收任何信息! 问题答案: 您需要在调用行的后面立即调用,原因是仅要求下一个整数不会占用输入中的整个行,因此您需要通过调用来跳至输入中的下一个新行字符。 每次您需

  • 我对编程相当陌生。目前我正在做一个uni项目,用java创建一个基本的文本游戏。我遇到的问题是,如何实现一个不允许用户输入相同名称的业务规则。我把它设置好了,这样扫描仪就可以读取阵列了。我使用的是Java,这是我第一次使用这个论坛,所以我非常感谢大家提供的帮助,并提前感谢大家!:) 并为糟糕的格式道歉,我不知道如何正确发布。