2013-10-25 28 views
5

Daha önce bir soru sordum ve o zamandan beri kodumu biraz düzenledim ama şimdi okum bittiğinde kodum durmayacak, bitmiyor."Bitti" girdiğimde programım bitmeyecek

public class Done { 

    public static void main(String[] args){ 

     Scanner kb = new Scanner(System.in); 
     ArrayList<String> sal = new ArrayList<String>(); 
     int count = 0; 
     while (true){ 
      sal.add(kb.next()); 
      if (sal.equals("done")) 
       break; 
      count++; 
     } 
     display(sal); 
     displayb(sal); 
    } 

    public static void display(ArrayList<String> sal){ 

     for (int i=0; i<sal.size(); i++) 
      System.out.print(sal.get(i)+ " "); 
     System.out.println(); 
    } 

    public static void displayb(ArrayList<String> sal){ 

     for (int z = sal.size(); z >= 1; z--) 
      System.out.print(sal.get(z-1) + " "); 
     System.out.println(); 
    } 
} 

"done" ifadesini girdiğimde kodum durmaz. Neyi yanlış yaptığımı bilen var mı?

+1

Döngüyü sonlandırmak için hiçbir zaman ara vermemelisiniz ... bunun yerine istediğiniz ifadeyi ters çevirin ve while döngüsüne koyun. – Dom

+0

@ Üzgünüz, bunu nereden duydunuz bilmiyorum ama baloney. İstediğiniz ifadenin '!' Öğesini her zaman 'while' koşuluna getiremezsiniz. Burada yapamazsın çünkü önce girişi yapmalısın. Ve bunu yapmanın tek yolu, 'break' den daha fazla kaçınılması gereken bir şey olan çoğaltılmış kod olan iki kez 'kb.next()' giriş çağrısını yazmaktır. Kodu kırmaktan kaçınmak için yeniden yazmanın başka yolları vardır, ancak daha az okunabilir hale getireceklerdir. – ajb

cevap

6

ArrayListsal"done" dizgisine eşit olup olmadığını kontrol ediyorsunuz - bu asla doğru olmaz. son giriş İpin eşitse Belki denetlemek istediğiniz:

while (true) 
{ 
    String input = kb.next(); 

    if (input.equals("done")) 
     break; 

    sal.add(input); 
    count++; 
} 
+0

Teşekkürler! Görüntülemenin görüntülenmemesi ile ilgili bir fikrin var mı? – user2920249

+0

@ user2920249 Düzenlenmiş kodu deneyin (yani listeye ekleyerek * önce * işlenmesini kontrol edin). – arshajii

+0

'“ done ”.equals (input)' biraz daha iyi, değil mi? – nhgrif

1

kb.next() karşılaştırmak istediğiniz dizedir. Bir değişkende olduğu kaydetmek gerekir:

String inputString = kb.next(); 
if (inputString.equals("done")) 
    break; 
sal.add(inputString); 

da diziye "done" katılmaması sorunu çözecektir O.

İlgili konular