java - 扫描仪始终需要两个输入(Java)

标签 java java.util.scanner

我正在尝试实现一种让玩家选择用户名的方法。该方法根据当前运行的操作系统的用户名来建议一个。现在,如果用户对建议不满意,我想为用户提供更改他/她的昵称的选项。现在的问题是,我总是必须输入两次声明,因为我猜其中任何一个都没有被采纳。

(例如我必须输入:

“y”

“y”)

我尝试更改 while 循环中的语句(例如“nameChange.hasNextLine()”)。我尝试添加“nameChange.nextLine();” “line = nameChange.nextLine();”之前和之后(正如一篇类似的文章所建议的那样)但两者都不起作用。

public class SetUsername implements Runnable {

    /**
     * Suggests a name based on the accessing OS's user Let's the user change the suggestion to his
     * or her own username.
     */
    @Override
    public void run() {
      String name = System.getProperty("user.name");
      Scanner nameChange = new Scanner(System.in);
      System.out.println("Your username is: " + name + ". Would you like to change it? (y/n)");
      String line;
      while (true) {
        line = nameChange.nextLine();
        if (line.equals("y")) {
          System.out.println("Chose a new username:");
          while(true) {
            name = nameChange.nextLine();
            System.out.println("Your new username is "+ name);
            break;
          }
          break;
        } else if (line.equals("n")) {
          break;
        } else {
          System.out.println("Invalid input. Your username is: " + name + ". "
              + "Would you like to change it? (y/n)");
        }
      }
      send(Command.SET_USERNAME, name);
    }
  }


最佳答案

“在调用 next() 或 nextInt() 结束之前,您可能正在运行一些其他方法,因此不会消耗行结尾。” – JB 尼泽

这就是问题所在。

关于java - 扫描仪始终需要两个输入(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55325920/

相关文章:

java - 使用有界泛型类扩展另一个泛型类会产生未知类型

java - 如何将大量响应数据从 Java Rest Web 服务传递到客户端?

java - 将 JSON 转换为 XML 时添加额外的元数据

Java/Selenium WebDriver : How to get user input and insert it in to a text field?

Java Scanner 需要多个条目

java - 有没有办法在 iphone 上阅读编程语言?

java - Deployment Assembly 中的 target/m2e-wtp/web-resources 是什么?

java - 不兼容类型错误,Java

java - 在 Java 中使用 Scanner 后代码无法继续

Java:限制字符串中的字符