2013-10-25 15 views
5

Tôi đã hỏi một câu hỏi trước đó và kể từ đó tôi đã chỉnh sửa mã của mình một chút nhưng giờ mã của tôi sẽ không dừng khi tôi đọc xong nó không dừng lại.Chương trình của tôi sẽ không dừng lại khi tôi nhập "xong"

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(); 
    } 
} 

Mã của tôi sẽ không dừng khi tôi nhập cụm từ "xong". Bất cứ ai biết những gì tôi có thể làm sai?

+1

Bạn không bao giờ nên sử dụng lệnh ngắt để kết thúc vòng lặp ... thay vào đó bạn nên đảo ngược câu lệnh mong muốn của mình và đặt nó trong vòng lặp while. – Dom

+0

@Dom xin lỗi, tôi không biết bạn nghe thấy điều này ở đâu, nhưng đó là tiền. Bạn không thể luôn đặt '!' Của câu lệnh mong muốn trong điều kiện 'while'. Bạn không thể làm điều đó ở đây vì bạn phải làm đầu vào trước. Và cách duy nhất bạn có thể làm là ghi cuộc gọi đầu vào 'kb.next()' hai lần, là mã trùng lặp, đó là điều gì đó nên tránh hơn 'ngắt'. Có nhiều cách khác để viết lại mã để tránh 'break' nhưng chúng sẽ làm cho nó ít dễ đọc hơn. – ajb

Trả lời

6

Bạn đang kiểm tra xem ArrayListsal bằng chuỗi "done" - điều này sẽ không bao giờ đúng. Có lẽ bạn muốn kiểm tra xem các đầu vào mới nhất là tương đương với chuỗi:

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

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

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

Cảm ơn !!! Bất kỳ ý tưởng về làm thế nào để làm cho nó không hiển thị được thực hiện mặc dù? – user2920249

+0

@ user2920249 Hãy thử mã đã chỉnh sửa (nghĩa là chỉ cần kiểm tra đã thực hiện * trước khi * thêm vào danh sách). – arshajii

+0

'" done ".equals (input)' là tốt hơn một chút, phải không? – nhgrif

1

kb.next() là một chuỗi bạn muốn so sánh. Bạn sẽ cần phải lưu điều đó trong một biến:

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

Điều đó cũng sẽ giải quyết được vấn đề không thêm "done" vào mảng.

Các vấn đề liên quan