Java – Vòng lặp while

Vòng lặp while được sử dụng để chạy một khối câu lệnh liên tục cho đến khi điều kiện đã cho là true.

Vòng lặp while là vòng lặp được kiểm soát đầu vào, điều kiện while được kiểm tra trước khi lặp.

Điều kiện được kiểm tra lặp đi lặp lại cho tới khi điều kiện kiểm tra chuyển thành false và nó được đánh dấu rằng vòng lặp đã kết thúc.

Cú pháp của vòng lặp while trong Java như sau

while (expression) {
    // statements
}

expression là biểu thức cho vòng lặp while phải trả về một giá trị boolean, nếu không nó sẽ đưa ra một lỗi khi biên dịch

Sau đây là ví dụ về vòng lặp while dùng để in các số từ 5 đến 10

package com.example.javawhileloop;

public class JavaWhileLoop {

  public static void main(String[] args) {
    int i = 5;
    while (i <= 10) {
      System.out.println(i);
      i++;
    }
  }
}

Kết quả

5
6
7
8
9
10

Chú ý rằng giá trị i được tăng bên trong vòng lặp while, nếu không thì vòng lặp while sẽ không bao giờ kết thúc và sẽ trở thành vòng lặp vô hạn. Chỉ có một cách để kết thúc vòng lặp vô hạn bằng cách thoát một cách thủ công hoặc khi JVM chạy tràn bộ nhớ.

Ngoài ra chú ý rằng nếu biểu thức expression trả về false thì các câu lệnh bên trong vòng lặp while sẽ không chạy. Vì vậy có khả năng câu lệnh bên trong vòng lặp while sẽ không bao giờ chạy.

Vòng lặp while với iterator

Vòng lặp while được sử dụng nhiều với iterator trong Java. Chúng ta hãy cùng xem ví dụ sau sử dụng vòng lặp while cho ArrayList

List<String> veggies = new ArrayList<>();
veggies.add("Spinach");
veggies.add("Potato");
veggies.add("Tomato");

Iterator<String> it = veggies.iterator();

while(it.hasNext()) {
  System.out.println(it.next());
}

Kết qủa

Spinach
Potato
Tomato

While true

Trong một vài trường hợp chúng ta muốn vòng lặp chạy vô hạn. Trong trường hợp này chúng ta sử dụng vòng lặp while true. Một ví dụ dùng để tìm kiếm một file tại vị trí cụ thể liên tục và nếu tìm thấy thì xử lý nó. Dưới đây là ví dụ về while true trong Java.

package com.example.javawhileloop;

public class WhileTrueJava {

  public static void main(String[] args) {
    while(true) {
      System.out.println("Start Processing");
      // look for a file at specific directory
      // if found then process it, say insert rows into database
      System.out.println("End Processing");
			
      //  wait for 10 seconds and look again
      try {
        Thread.sleep(10*1000);
      } catch (InterruptedException e) {
        System.out.println("Thread Interrupted, exit now");
        System.exit(0);
      }
    }
  }
}

Nếu chạy code trên chúng ta phải thoát chương trình bằng tay bằng cách sử dụng ctrl+c trên terminal

Kết qủa

Start Processing
End Processing
Start Processing
End Processing

Ngược lại nếu chúng ta có thể đặt code của mình bên trong vòng lặp false do đó nó sẽ không chạy gì hết không?

Trình biên dịch Java đủ thông minh để thông báo một lỗi cho chúng ta là code không thể truy cập.

Nhưng có một cách để lách được lỗi trên bằng cách một biến trung gian boolean và lỗi biên dịch sẽ không xuất hiện nữa

boolean mutex = false;
while(mutex) {
  System.out.println("incomplete code");
}

 

You May Also Like

About the Author: Nguyen Dinh Thuc

Leave a Reply

Your email address will not be published.