2016-03-20 10 views
0

によるスイッチケースでループしながら終了、私は、メッセージ本文を入力するためにそれらを取得し、メッセージの 受信者の名前を入力するようにユーザを取得し、ためになってるいます は複数の行を持つことができます。彼らは空白行を入力すると、メッセージ本文が終了し、 彼らは、スイッチ内の別のケースを選択することができます。は(Javaは)簡単に説明するために、空行

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ループは完全にスキップされます。私はmenuScan.next().nextLine()menuScan.nextLine()recip、そしてmbodyを変更しようとしましたが、たまたま唯一の他の事は、メッセージ本文は永遠に行くです。

また、recipmbodyの2つの異なるスキャナオブジェクトを使用しようとしましたが、そこに運がありません。

+0

使用条件の代わり – Gaktan

+1

可能重複[(次の使用の後にスキップnextLine())、nextInt()または他のnextFoo()メソッド(http://stackoverflow.com /質問/ 13102045 /スキップ-nextlineアフタ - 次nextint・オア・その他-nextfoo-メソッドを使用して) –

答えて

0

私は少し

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

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

に予想されるようにループが実行され、終了する。この方法を変更

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

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

をあなたのコードのこの部分を試してみました。 java.util.Scannerを使用しました

+2

あなたは逃した '.next()' 'レシプ= menuScan.next()上;'。そのため、whileループは決して入力されません。 –

+0

あなたは正しいです。私に指摘してくれてありがとう。 – RubioRic

+0

ありがとう!これはバックエンドで機能しますが、同時に "受信者:"と "メッセージ入力:"プロンプトが表示されます。それらを分ける方法はありますか? – codeslinger19

2

nextnextLineに置き換える必要があります。それはあなたが望むものではありません指定された文字列、から構築されたパターンに一致する場合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."); 
+1

この回答は正しくありません。ループ内のnextLineの前に追加をしないと、最初に入力したテキスト行が失われます。あなたはそれらの行を交換する必要があります – RubioRic

+0

私は前に投稿された私の答えでそれを検出しました。 – RubioRic

+0

@RubioRic、あなたはまったく正しい!私の答えを更新しました...私がやったテストでは、それもポストしていることに気づきましたが、タイプミスでした。それを指摘してくれてありがとう! ;) – aribeiro

関連する問題