1. breaktuyên bố

Hãy xem một ví dụ từ bài học trước:

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 một dòng từ bàn phím, cho đến khi bạn nhập "exit".

Chương trình đọc các dòng từ bàn điều khiển cho đến khi từ exitđược nhập. Nếu bạn nhập từ này, thì isExit biến sẽ trở thành true, điều kiện vòng lặp sẽ là và vòng lặp sẽ kết thúc."!isExitfalse

Java có một breakcâu lệnh đặc biệt cho phép bạn đơn giản hóa logic như vậy. Nếu một breakcâu lệnh được thực thi bên trong một vòng lặp, thì vòng lặp đó sẽ kết thúc ngay lập tức. Chương trình sẽ bắt đầu thực hiện câu lệnh theo sau vòng lặp. Tuyên bố rất ngắn gọn:

break;

Đây là cách bạn có thể sử dụng breakcâu lệnh để viết lại ví dụ mà chúng ta vừa thảo luận:

Mã số Giải trình
Scanner console = new Scanner(System.in);
while (true)
{
   String s = console.nextLine();
   if (s.equals("exit"))
     break;
}
Chương trình sẽ đọc một dòng từ bàn phím, cho đến khi bạn nhập "exit".


2. câu lệnh tiếp tục

Nhưng breakkhông phải câu lệnh Java duy nhất cho phép bạn kiểm soát hành vi của vòng lặp. Java cũng có continuetuyên bố. Nếu bạn thực hiện một continuecâu lệnh bên trong một vòng lặp, thì lần lặp lại hiện tại của vòng lặp sẽ kết thúc trước thời hạn.

Thực hiện thân vòng lặp một lần được gọi là một lần lặp của vòng lặp. Câu continuelệnh làm gián đoạn bước lặp hiện tại của vòng lặp, nhưng không giống như breakcâu lệnh, nó không tự kết thúc vòng lặp. Tuyên bố cũng ngắn gọn:

continue;

Câu continuelệnh cực kỳ tiện lợi trong một vòng lặp nếu chúng ta muốn 'bỏ qua' việc thực thi phần thân vòng lặp trong một số trường hợp nhất định.

Nhiệm vụ: Chúng tôi muốn viết một chương trình in các số từ đến 1nhưng 20bỏ qua các số chia hết cho 7. Đây là những gì mã này có thể trông giống như.

Mã số Giải trình
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0 )
     continue;
   System.out.println(i);
   i++;
}
Chương trình hiển thị các số từ 1đến 20. Nếu số đó chia hết cho 7(dư của phép chia cho 70), thì chúng ta bỏ qua việc hiển thị số.

Trên thực tế, mã này sẽ không hoạt động , vì isẽ bị kẹt mãi mãi ở số 7. Rốt cuộc, continuecâu lệnh bỏ qua hai câu lệnh khác: System.out.println(i)i++. Kết quả là, khi chúng ta đạt đến giá trị 7, biến isẽ ngừng thay đổi và chúng ta sẽ ở trong một vòng lặp vô tận.

Chúng tôi viết mã theo cách này nhằm mục đích minh họa lỗi rất phổ biến này. Làm thế nào để chúng tôi sửa chữa nó?

Có hai lựa chọn ở đây:

Tùy chọn 1: thay đổi itrước khi thực hiện continue, nhưng saui % 7

Tùy chọn 2: luôn tăng dần iở đầu vòng lặp. Nhưng igiá trị bắt đầu của sau đó phải là 0.

lựa chọn 1 Lựa chọn 2
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0 )
   {
     i++;
     continue;
   }
   
   System.out.println(i);
   i++;
}
int i = 0;
while (i < 20)
{
   i++;
   if ( (i % 7) == 0)
     continue;
   System.out.println(i);
}