2016-03-20 44 views
0

简要解释一下,我应该让用户输入消息的收件人名称,然后让他们输入消息正文,可以 有多行。如果他们输入一个空白行,则消息正文结束,并且他们可以在交换机中选择另一个案例。(Java)退出While循环在空行开关的情况下

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(),mbodymenuScan.next().nextLine(),但唯一发生的其他事情是邮件正文永远持续。

我也尝试过使用两个不同的扫描仪对象recipmbody,但没有运气。

+0

使用条件代替 – Gaktan

+1

的可能的复制[跳跃nextLine()使用后的next(),nextInt()或其它nextFoo()方法](http://stackoverflow.com/questions/13102045/skip-nextline-after-using-next-nextint-or-other-nextfoo-methods) –

回答

0

我试过这段代码

 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

+2

您错过了'recip = menuScan.next();'上的'.next()'。这就是为什么while循环从不输入的原因。 –

+0

你说得对。谢谢你指出我。 – RubioRic

+0

谢谢!这适用于后端,但“收件人:”和“输入消息:”会同时显示。有没有办法将它们分开? – codeslinger19

2

您应该用nextLine替换nextnext,正如文档所述,返回下一个标记,如果它与从指定的字符串构建的模式相匹配,这不是您想要的。

尝试以下方法:

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."); 
+1

这个答案不正确。如果您在循环内的nextLine之前未执行附加操作,则会丢失第一个输入的文本行。您必须互换这些行 – RubioRic

+0

我在之前发布的答案中检测到这一点。 – RubioRic

+0

@RubioRic,你是完全正确的!更新了我的答案......在我做的测试中,我注意到,但也发布了它,造成了一个错字。感谢您指出了这一点! ;) – aribeiro