2016-03-20 46 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