2016-03-20 15 views
0

Kısaca açıklamak gerekirse, kullanıcının bir mesajın alıcısının ismini girmesini sağlayın ve sonra mesaj gövdesini girmesini sağlayın. , birden çok satıra sahip olabilir. Boş bir satır girerse, mesaj gövdesi sona erer ve anahtarda başka bir durum seçebilirler.(Java) Boş Satırla Geçiş Durumunda Döngü Çıkışından Çıkılıyor

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; 

Fakat şimdi olduğu gibi, while döngüsü tamamen atlanır. recip'u menuScan.nextLine() ve mbody - menuScan.next() ve .nextLine() olarak değiştirmeyi denedim, ancak gerçekleşen diğer tek şey ileti gövdesinin sonsuza kadar sürmesidir.

Ayrıca, recip ve mbody için iki farklı Tarayıcı nesnesi kullanmayı denedim, ancak burada da şans yok.

+0

Kullanım koşulları yerine – Gaktan

+1

Olası yinelenen [Atlama nextLine()) (sonraki, nextInt() veya diğer nextFoo() yöntemleri kullandıktan sonra] (http://stackoverflow.com:

izlemeyi deneyin/sorular/13102045/atlama-sonraki-sonraki-sonraki-sonraki-sonraki-veya-diğer-sonraki-yöntem) –

cevap

0

Bir Biti

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

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

o döngü yürütülür Bu şeklini değiştirerek Kodunuzdaki

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

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

bu parça denenmiş ve beklendiği gibi çıktıktan. java.util.Scanner'ı kullanıyorum

+2

'.next()' 'recip = menuScan.next();'. Bu yüzden 'while' döngüsüne asla girilmez. –

+0

Haklısınız. Bana bunu söylediğin için teşekkürler. – RubioRic

+0

Teşekkürler! Bu, arka uçta çalışır, ancak "Alıcı:" ve "İleti girin:" istemleri aynı anda görüntülenir. Onları ayırmanın bir yolu var mı? – codeslinger19

2

next'u nextLine ile değiştirmelisiniz. next, belge olarak, belirtilen belirtecin belirtilen yapıyla eşleşiyorsa, sonraki belirteci döndürür. arasında

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

Bu cevap doğru değil. Eklemeyi döngü içinde nextLine'den önce yapmazsanız, girilen ilk metin satırını kaybedersiniz. Bu satırları – RubioRic

+0

olarak değiştirmelisiniz. Cevabımda daha önce gönderdiğimi tespit ettim. – RubioRic

+0

@RubioRic, kesinlikle haklısınız! Cevabımı güncelledim ... Yaptığım testte bunu da fark ettim ama onu yazdım, bir yazım hatası yaptım. Bunu işaret ettiğin için teşekkürler! ;) – aribeiro

İlgili konular