1. Những vòng lặp trong cuộc đời chúng ta

Rất thường xuyên, cuộc sống của chúng ta đòi hỏi chúng ta phải thực hiện nhiều lần những hành động giống nhau. Ví dụ: giả sử tôi cần quét một tài liệu gồm nhiều trang. Rằng chúng tôi lặp đi lặp lại cùng một quy trình:

  • Đặt trang đầu tiên trên máy quét
  • Nhấn nút quét
  • Đặt trang tiếp theo trên máy quét

Điều này rất khó thực hiện thủ công. Sẽ thật tuyệt nếu quá trình này có thể được tự động hóa bằng cách nào đó.

Hoặc xem xét một ví dụ khác: giả sử tôi muốn đánh dấu tất cả các email chưa đọc trong hộp thư đến của mình là thư rác. Ngày xửa ngày xưa, tôi phải chọn từng email một và đánh dấu nó là thư rác.

Nhưng các lập trình viên lười biếng, vì vậy họ đã tự động hóa quy trình này từ lâu: bây giờ bạn chỉ cần chọn bất kỳ danh sách thư nào và nhấp vào "đánh dấu là thư rác", sau đó ứng dụng email của bạn chạy qua danh sách và chuyển từng email vào thư mục thư rác.

Chúng ta có thể nói gì ở đây? Thật tiện lợi khi một máy tính hoặc chương trình có thể thực hiện hàng trăm hoặc hàng nghìn thao tác đơn điệu chỉ bằng một cú nhấp chuột. Và bây giờ bạn cũng sẽ học cách làm điều này.


2. whilevòng lặp

Câu lệnh if-else đã mở rộng đáng kể khả năng lập trình của chúng ta, giúp chúng ta có thể viết các chương trình thực hiện các hành động khác nhau trong các tình huống khác nhau. Nhưng có một điều nữa sẽ làm cho các chương trình của chúng ta trở nên mạnh mẽ hơn - các vòng lặp .

Java có 4 loại vòng lặp: while, for, for-eachdo-while. Bây giờ chúng ta sẽ đi sâu vào điều đầu tiên trong số này.

Một whilevòng lặp rất đơn giản. Nó chỉ bao gồm hai phần: điều kiệnthân vòng lặp . Thân vòng lặp được thực hiện lặp đi lặp lại miễn là điều kiện là true. Nói chung, một whilevòng lặp trông như thế này:

while (condition)
   statement;
Ký hiệu cho một whilevòng lặp với một câu lệnh duy nhất
while (condition)
{
   block of statements
}
Ký hiệu cho một whilevòng lặp với một khối câu lệnh

Nó rất đơn giản. Câu lệnh hoặc khối câu lệnh được thực hiện lặp đi lặp lại miễn là điều kiện vòng lặp bằng true.

Đây là cách nó hoạt động: đầu tiên, điều kiện được kiểm tra. Nếu nó đúng, thì thân vòng lặp được thực thi ( câu lệnh hoặc khối câu lệnh ). Sau đó, điều kiện được kiểm tra lại và thân vòng lặp được thực hiện lại. Và cứ như vậy cho đến khi điều kiện trở thành sai.

Nếu điều kiện luôn đúng thì chương trình sẽ không bao giờ ngừng chạy. Nó sẽ bị mắc kẹt vĩnh viễn trong vòng lặp.

Nếu điều kiện sai ngay lần đầu tiên được kiểm tra , thì phần thân của vòng lặp sẽ không được thực hiện dù chỉ một lần.


3. Ví dụ về vòng lặp

Dưới đây là một số ví dụ thực tế về các vòng lặp đang hoạt động.

Mã số Giải trình
int n = 5;
while (n > 0)
{
   System.out.println(n);
   n--;
}
5 dòng sẽ được hiển thị trên màn hình:
5
4
3
2
1
Mã số Giải trình
int  n = 0;
while (n < 10)
{
   System.out.println(n);
   n++;
}
10 dòng sẽ được hiển thị trên màn hình:
0
1
...
8
9
Mã số Giải trình
Scanner console = new Scanner(System.in);
while(console.hasNextInt())
{
   int x = console.nextInt();
} 
Chương trình đọc các số từ bàn phím miễn là các số được nhập vào.
Mã số Giải trình
while (true)
   System.out.println("C");
Chương trình sẽ in vô tận ký tự Ctrên màn hình.
Mã số Giải trình
Scanner console = new Scanner(System.in);
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
Chương trình sẽ đọc các dòng từ bàn phím

cho đến khi exitđược nhập.

Trong ví dụ trước, equals()phương thức này được sử dụng để so sánh các chuỗi. Nếu các chuỗi bằng nhau, hàm sẽ trả về true. Nếu các chuỗi không bằng nhau, thì nó sẽ trả về false.



4. Vòng lặp trong một vòng lặp

Khi tìm hiểu về câu lệnh điều kiện, bạn đã thấy rằng bạn có thể sử dụng chúng để thực hiện logic phức tạp bằng cách kết hợp nhiều câu lệnh điều kiện. Nói cách khác, bằng cách sử dụng một ifcâu lệnh bên trong một ifcâu lệnh.

Bạn có thể làm điều tương tự với các vòng lặp. Để viết một vòng lặp bên trong một vòng lặp, bạn cần viết vòng lặp thứ hai bên trong phần thân của vòng lặp đầu tiên. Nó sẽ trông giống như thế này:

while (condition for outer loop)
{
   while (condition for inner loop)
   {
     block of statements
   }
}
whilevòng lặp (với một khối câu lệnh ) bên trong một whilevòng lặp khác

Hãy xem xét ba nhiệm vụ.

Nhiệm vụ 1 . Giả sử chúng ta muốn viết một chương trình hiển thị từ đó Momtrên màn hình 4 lần. Một vòng lặp chính xác là những gì chúng ta cần. Và mã của chúng tôi sẽ trông giống như thế này:

Mã số Giải trình
int  n = 0;
while (n < 4)
{
   System.out.println("Mom");
   n++;
}
4 dòng sẽ được hiển thị trên màn hình:
Mom
Mom
Mom
Mom

Nhiệm vụ 2 . Chúng tôi muốn viết một chương trình hiển thị 5 chữ cái As trên một dòng. Để làm điều này, chúng ta cần lặp lại một lần nữa. Đây là những gì mã sẽ trông như thế nào:

Mã số Giải trình
int n = 0;
while (n < 5)
{
   System.out.print("A");
   n++;
}
Thay vì println(), chúng tôi sẽ sử dụng print(). Nếu không, mỗi chữ cái A sẽ kết thúc trên một dòng riêng biệt.

Đầu ra màn hình sẽ là:
AAAAA

Nhiệm vụ 3 . Chúng tôi muốn hiển thị một hình chữ nhật bao gồm chữ As. Hình chữ nhật phải bao gồm 4 hàng 5 cột. Để thực hiện điều này, bây giờ chúng ta cần một vòng lặp lồng nhau. Chúng ta sẽ chỉ lấy ví dụ đầu tiên (ví dụ mà chúng ta xuất 4 dòng) và thay thế mã để xuất một dòng bằng mã từ ví dụ thứ hai.

Mã số Giải trình
int n = 0;

while (n < 4) { int m = 0;
while (m < 5) { System.out.print("A"); m++; }
System.out.println(); n++; }
 
Vòng ngoài màu tím. Nó sử dụng nbiến để đếm số lần lặp của vòng lặp.

Vòng lặp bên trong có màu xanh lá cây. Nó sử dụng mbiến để đếm số lần lặp của vòng lặp.

Chúng ta phải di chuyển con trỏ đến dòng tiếp theo một cách rõ ràng sau khi hoàn thành vòng lặp bên trong. Nếu không, tất cả các chữ cái mà chương trình in sẽ kết thúc trên một dòng.

Đầu ra màn hình sẽ là:
AAAAA
AAAAA
AAAAA
AAAAA

Các vòng lặp bên ngoài và bên trong phải sử dụng các biến khác nhau để đếm số lần lặp lại vòng lặp. Chúng tôi cũng phải thêm System.out.println()lệnh sau vòng lặp bên trong, vì vòng lặp đó hiển thị chữ cái As trên cùng một dòng. Khi các chữ cái trên một dòng được hiển thị, ai đó phải di chuyển con trỏ đến một dòng mới.



5. So sánh vòng lặp Java vs Pascal

Nhiều bạn đã học Pascal ở trường phổ thông. Để giúp bạn hiểu tài liệu ở đây dễ dàng hơn, hãy xem so sánh whilecác vòng lặp được viết bằng Pascal và Java này. Nếu bạn không biết Pascal thì có thể bỏ qua phần này.

pascal Java
i := 3;
While i >= 0 Do
   Begin
      WriteLn(i);
      i := i - 1;
   End;
int i = 3;
while (i >= 0)
{
   System.out.println(i);
   i--;
}
i := 0;
While i < 3 Do
   Begin
      WriteLn(i);
      i := i + 1;
   End;
int i = 0;
while (i < 3)
{
   System.out.println(i);
   i++;
}
IsExit := False;
While Not isExit Do
   Begin
      ReadLn(s);
      isExit :=  (s = 'exit');
   End;
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
While True Do
   WriteLn('C');
while (true)
   System.out.println("C");
While True Do
   Begin
     ReadLn(s);
     If s = 'exit' Then
       Break;
   End;
while (true)
{
   String s = console.nextLine();
   if (s.equals("exit"))
     break;
}