簡體   English   中英

(Java)在帶有空行的開關案例中退出while循環

[英](Java) Exiting While Loop In Switch Case With Empty Line

為了簡要說明,我假設讓用戶輸入郵件收件人的名稱,然后讓他們輸入郵件正文,該正文可以有多行。 如果他們輸入空白行,則消息正文結束,他們可以在開關中選擇其他情況。

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() ,將menuScan.next() mbodymenuScan.next().nextLine() ,但唯一發生的另一件事是消息正文永久存在。

我也嘗試過為recipmbody使用兩個不同的Scanner對象,但也沒有運氣。

您應該用nextLine替換next next ,作為文檔指出, 返回下一個標記,如果從指定的字符串 ,這是不是你想要的構造的模式匹配

請嘗試以下操作:

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

我已經試過了這段代碼

      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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM