Nó hoạt động thực sự, nhưng hành vi phụ thuộc vào những điều kiện bạn đang thử nghiệm. Ví dụ. mã này:
int i = 2;
int j = 4;
do while(j > 0) {
i--; j--;
System.out.println("i:" + i + " j:" + j);
} while(i > 0);
kết quả đầu ra:
i:1 j:3
i:0 j:2
i:-1 j:1
i:-2 j:0
Vì vậy, nó hoạt động như:
while(j>0) {
}
Trong khi đó bằng cách trao đổi các tên biến:
do while(i > 0) {
//.. same as above
} while(j > 0);
Đầu ra là:
i:1 j:3
i:0 j:2
Dường như nó hoạt động giống như trong trường hợp đầu tiên (tức là thời gian đầu tiên được xem xét), nhưng ở đây, ứng dụng không chấm dứt!
Tóm tắt:
Vào thời điểm đó khi testA
là không hài lòng nữa và testB
cũng là không hài lòng, mã hoạt động giống như một vòng lặp while(testA){}
bình thường.
Nhưng: Nếu, vào thời điểm đó khi testA
là không còn hài lòng, testB
vẫn hài lòng, vòng lặp là không thực hiện nữa và kịch bản là không chấm dứt. Điều này chỉ áp dụng nếu điều kiện của vòng lặp "bên ngoài" cần được thay đổi bên trong vòng lặp.
Cập nhật: Và sau khi đọc câu trả lời khác, tôi nhận ra rằng đây chính là hành vi của lồng nhau do-while
- while
vòng lặp.
Dù sao, bài học kinh nghiệm: Không sử dụng loại cú pháp này vì nó có thể gây nhầm lẫn cho bạn;)
Nguồn
2010-03-12 17:41:16
Hành vi bạn mong đợi là đồng nghiệp đánh bạn bằng gậy. – voyager
@voyager May mắn là tôi không có đồng nghiệp nào để theo dõi; cảm ơn cho lời khuyên mặc dù! – Pindatjuh