【问题标题】:Scanner Ignores Some Inputs (System.in)扫描仪忽略某些输入 (System.in)
【发布时间】:2014-06-10 16:16:16
【问题描述】:

我最近遇到了这个令人沮丧的问题,扫描仪完全忽略了来自 System.in 输入流的一些输入。这是一个例子:

Do you want a cookie? Yes or no.

现在,我输入是:

yes

结果:

Cookie for you!

现在,如果我说不:

no
no

结果:

No Cookie for you.

明白了吗?如果我说是,它就会接受它。如果我说不,我必须输入 2 次。

如果你真的需要一些代码。这是其中的一些:)

public static void main(String[] paramArgs){
    MainEW sMain = new MainEW();
    Scanner s = sMain.scanner;

    System.out.println("Enter a file path.");
    System.out.println("Example: /Users/Some_User/Desktop/Some_Folder");
    String defPath = s.next();

    System.out.println("Enter a name for the file.");
    String defName = s.next() + ".txt";

    System.out.println("Now, enter what you want to write to the file.");
    s.nextLine();
    String defText = s.nextLine();

    System.out.println("Do you want to create a new file? Yes or No");

    if (s.next().equalsIgnoreCase("yes")) {
        WriterEW writer = new WriterEW(defPath, defName, defText, true);
        return;
    } else if (s.next().equalsIgnoreCase("no")) {
        WriterEW writer = new WriterEW(defPath, defName, defText, false);
        return;
    } else {
        System.out.println("Invalid input.");
    }
}

谢谢:)

【问题讨论】:

  • 在您的代码中找不到Cookie!!!
  • 我确实意识到 xP。不过和我现在用的一样。
  • 那你到底为什么要为此而对我的帖子投反对票:(

标签: java input stream


【解决方案1】:

当您键入“否”时,else if 块再次调用 next(),要求更多输入。

不要在每种情况下都调用s.next(),而是在开始if 条件之前只调用一次。

String response = s.next();
if(response.equalsIgnoreCase("yes")){
    WriterEW writer = new WriterEW(defPath, defName, defText, true);
    return;
}else if(response.equalsIgnoreCase("no")){

【讨论】:

  • 好的,我明白你想告诉我的了。但正如您在我的代码中看到的那样。在我真正调用我的 if 语句之前,我实际上并没有要求输入......这不应该解决问题吗?
  • 在您的代码中,您的if 条件通过调用s.next() 要求输入。您输入“no”,它不等于“yes”,所以接下来会运行 else if 代码。然后else if 条件也通过调用s.next() 再次要求输入。你再次输入“no”,它等于“no”,所以else if 块运行。
  • 我实际上认为如果代码实际运行(在 if 语句中)如果它实际上是真的 xD
  • 非常感谢。你回答了我的问题。
  • 不,if 条件中的代码始终运行。如果条件为false,则以下块将不会运行。
猜你喜欢
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
相关资源
最近更新 更多