【问题标题】:(Java) Exiting While Loop In Switch Case With Empty Line(Java) 在空行的 Switch 情况下退出 While 循环
【发布时间】:2016-03-20 19:28:49
【问题描述】:

简单解释一下,我应该让用户输入 消息的接收者,然后让他们进入消息正文,这可以 有多条线路。如果他们输入一个空行,则消息正文结束并且 他们可以在开关中选择另一个案例。

case 'S':
case 's':
    if(user.equals(" ")) {
        System.out.println("No user logged in.");
    } else {
        System.out.println("Recipient: ");
        recip = menuScan.next();

        m = new Message(user,recip);

        System.out.println("Enter message. Blank line to quit.");
        mbody = menuScan.nextLine();

        while(!mbody.equals("")) {
            mbody = menuScan.next();
            m.append(mbody);
        }

        ms.deliver(m);

        System.out.println("Messgae sent.");

    }
    break;

但是就像现在一样,while 循环被完全跳过了。我尝试将recip 更改为menuScan.nextLine(),将mbody 更改为menuScan.next().nextLine(),但唯一发生的另一件事是消息正文永远存在。

我还尝试对recipmbody 使用两个不同的Scanner 对象,但也没有运气。

【问题讨论】:

标签: java while-loop switch-statement blank-line


【解决方案1】:

您应该将next 替换为nextLinenext,正如文档所述,如果它与从指定字符串构造的模式匹配,则返回下一个标记,这不是你想要的。

尝试以下方法:

System.out.println("Recipient: ");
recip = menuScan.nextLine();

m = new Message(user,recip);

System.out.println("Enter message. Blank line to quit.");
mbody = menuScan.nextLine();

while(!mbody.equals("")) {
    m.append(mbody);
    mbody = menuScan.nextLine();
}

ms.deliver(m);

System.out.println("Messgae sent.");

【讨论】:

  • 这个答案不正确。如果您不在循环内的 nextLine 之前进行追加,则会丢失第一行输入的文本。您必须交换这些行
  • 我在之前发布的答案中检测到了这一点。
  • @RubioRic,你完全正确!更新了我的答案......在我做的测试中,我注意到,但发布它,也犯了一个错字。感谢您指出了这一点! ;)
  • 好的,但是如果你的答案被接受而不是我的,那将是不公平的。 ://
【解决方案2】:

我已经尝试过你的这段代码

      System.out.println("Enter message. Blank line to quit.");
      mbody = menuScan.nextLine();

      while (!mbody.equals("")) {
           mbody = menuScan.next();
           m.append(mbody);
      }

稍微改一下

      System.out.println("Enter message. Blank line to quit.");
      mbody = menuScan.nextLine();

      while (!mbody.equals("")) {
           m.append(mbody);
           mbody = menuScan.nextLine();          
      }

这样循环按预期执行和退出。 我用过 java.util.Scanner

【讨论】:

  • 您错过了recip = menuScan.next(); 上的.next()。这就是为什么永远不会进入 while 循环的原因。
  • 谢谢!这适用于后端,但同时显示“收件人:”和“输入消息:”提示。有没有办法把它们分开?
  • @codeslinger19 您是否尝试过 aribeiro 的解决方案?我无法重现您描述的新情况。我首先得到“收件人:”。当我输入一行并按回车键时,我会正确地得到“输入消息:”。
  • 是的,我都试过了。看看整个交换机会有帮助吗?
  • @codeslinger19 我不这么认为。正如我所说,我使用了 java.util.Scanner。用 System.in 实例化它。也许您使用了另一个类或设置了特定的行分隔符。
猜你喜欢
  • 2017-11-16
  • 2013-10-21
  • 2016-06-09
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 2016-02-27
相关资源
最近更新 更多