Vòng lặp trong Java
Bên cạnh cấu trúc rẽ nhánh, lặp là một
cấu trúc vô cùng quan trọng. Có lẽ các bạn hẳn đã từng quen với các cấu trúc lặp
ở các ngôn ngữ lập trình khác, tuy nhiên hiểu cặn kẽ về nó, cũng như những trường
hợp áp dụng của mỗi cấu trúc lặp thì có lẽ vẫn còn những điều cần bàn. Vì vậy
trong phần dưới đây tác giả sẽ trình bày cặn kẽ các vấn đề liên quan.
1. Vòng lặp for
Cấu trúc lặp for hay người ta còn gọi
là cấu trúc lặp với số lần lặp xác định. Có tên gọi như vậy là vì khi viết đoạn
chương trình có cấu trúc for ta hoàn toàn có thể xác định được là vòng lặp sẽ được
thực hiện bao nhiêu lần.
Cú
pháp:
for(bieuthuc1;bieuthuc2;bieuthuc3)
{
Khoilenh;
}
Trong đó
- Bieuthuc1 là biểu thức khởi tạo cho
các biến điểu khiển (Ví dụ: i=0)
- Bieuthuc2 là biểu thức dùng để kiểm
tra điều kiện lặp (Ví dụ: i<100)
- Bieuthuc3 là biểu thức thay đổi giá
trị của biến điều khiển (Ví dụ: i++)
Hoạt
động:
- Khi gặp câu lệnh trên đầu tiên chương
trình sẽ thực hiện Bieuthuc1 để khởi tạo giá trị cho các biến điều khiển.
- Sau đó chương trình sẽ thực hiện Bieuthuc2
để kiểm tra điều kiện của vòng lặp. Nếu Bieuthuc2 đúng chương trình sẽ thực hiện
Khoilenh.
- Tiếp đó chương trình sẽ thực hiện
Bieuthuc3 để thay đổi giá trị của biến điều khiển. Và tiếp tục thực hiện kiểm
tra điều kiện lặp bằng bieuthuc2.
- Nếu Bieuthuc2 đúng chương trình lại
tiếp tục thực hiện quá trình trên cho đến khi Bieuthuc2 sai thì chương trình
thoát khỏi vòng lặp for.
Ví
dụ 2.13. Chương trình sau tính tổng các số từ 1 đến 100 và in ra kết quả:
public class Sum
{
public static void
main(String[] args)
{
int i,s;
s=0;
for(i=1;i<=100;i++)
{
s=s+i;
}
System.out.println(“Tong
cac so tu 1 den 100 la:” + s);
}
}
Chú
ý:
- Nếu
Khoilenh chỉ là một lệnh thì ta có thể bỏ qua dấu đóng mở khối lệnh {…}. Như
trong ví dụ trên ta có thể viết như sau:
for(i=1;i<=100;i++)
s=s+i;
- Trong Bieuthuc1 của vòng for ta có
thể vừa khai báo vừa khởi tạo giá trị cho các biến điểu khiển. Ví dụ đoạn chương
trình trên có thể viết lại nhưa sau:
public class Sum
{
public static void
main(String[] args)
{
int s=0;
for(int
i=1;i<=100;i++)
s=s+i;
System.out.println(“Tong
cac so tu 1 den 100 la:” + s);
}
}
- Nếu ngay từ đầu Bieuthuc2 đã sai thì
khối lệnh sẽ không được thực hiện một lần nào. Ví dụ đoạn chương trình dưới đây
sau khi kết thúc vòng lặp gí trị của S vẫn bằng không.
public class Sum
{
public static void
main(String[] args)
{
int s=0;
for(int
i=10;i<10;i++)
s=s+i;
System.out.println(“Tong
la:” + s);
}
}
-
Nếu việc thay đổi giá trị của biến điều khiển trong Bieuthuc3 không có khả năng
làm sai Bieuthuc2 thì chương trình sẽ treo. Ví dụ đoạn chương trình dưới đây sẽ
treo.
public class Sum
{
public static void
main(String[] args)
{
int s=0;
for(int
i=10;i<100;i=i)
s=s+i;
System.out.println(“Tong
la:” + s);
}
}
Sau
khi đã có đầy đủ kiến thức về các tình huống khác nhau đối với việc sử dụng
vòng lặp for. Có lẽ rằng bạn cần thực hành thêm một số bài tập để có thể đạt được
sử thành thạo hơn nữa. Ví dụ dưới đây cung cấp cho bạn một có hội như vậy.
Ví
dụ 2.14. Viết chương trình nhập vào một số nguyên n. Kiểm tra xem n có phải là
số nguyên tố không?
public
class primeNumber
{
public static void
main(String[] args) throws Exception
{
char ch;
int n,i,kt;
String str = new
String();
System.out.print(“Nhap
n=”);
ch = (char)System.in.read();
while(ch!= ‘\n’ )
{
str = str+ ch;
ch =
(char)System.in.read();
}
n=Integer.parseInt(str);
kt=0; // Khởi tạo cho biến kiểm tra ban đầu bằng 0
for(i=2;i<n;i++)
{
if(n%i==0)
kt=1;
}
if(kt==0) // Nếu vẫn
=0 thì n là nguyên tố
System.out.println(n+ “ La so nguyen
to”);
else
System.out.println(n+
“ Khong la so nguyen to”);
}
}
2. Vòng
lặp while
Có lẽ là các bạn đã khá quen với vòng
lặp while khi bạn thực hiện việc nhập liệu trên Java, tuy nhiên phần dưới đây sẽ
cung cấp cho các bạn đầy đủ hơn những thông tin cấn thiết giúp cho bạn có thể sử
dụng linh hoạt vòng lặp này.
Vòng lặp while hay còn được gọi là vòng
lặp không xác định. Có tên gọi như vậy là vì khi ta viết chương trình ta sẽ không
thể biết được là vòng lặp sẽ được thực hiện chính xác bao nhiêu lần. Trong thực
tế có rất nhiều các bài toán mà số lần thực hiện ta không thể biết trước chính
xác được. Trong những trường hợp như vậy rõ ràng bạn không thể sử dụng vòng lặp
for được. Lúc đó bạn hãy nghĩ đến vòng lặp while
Cú
pháp:
while(Bieuthuclogic)
{
Khoilenh;
}
Hoạt
động:
Hoạt động của vòng lặp while có thể mô
tả ngắn gọn như sau:
Khi gặp câu lệnh lặp while trên, đầu
tiên chương trình sẽ thực hiện tính giá trị của bieuthuclogic để kiểm tra điều
kiện lặp.
- Nếu bieuthuclogic nhận giá trị đúng,
chương trình sẽ thực hiện khối lệnh. Sau đó chương trình sẽ lại quay lại tính
giá trị của bieuthuclogic.
- Quá trình trên được lặp lại cho đến
khi bieuthuclogic sai.
Chú
y:
- Bieuthuclogic có thể là sự kết hợp của
nhiều bieuthuclogic (ví dụ: a<=b||b<=c,…)
- Nếu khối lệnh chỉ là một lệnh thì không
cần đến các dấu đóng, mở khối lệnh {…}
- Tất cả các đoạn chương trình được viết
bằng vòng lặp for đều có thể được thay thế bằng cách viết sử dụng vòng lặp while.
Ví dụ đoạn chương trình tính tổng các số từ 1 đến 100 có thể được viết như sau:
public class Sum
{
public static void main(String[]
args)
{
int s=0;
int i=0;
while(i<=100)
{
i=i+1;
s=s+i;
}
System.out.println(“Tong
cac so tu 1 den 100 la” + s);
}
}
- Nếu ngay từ đầu mà bieuthuclogic đã
sai thì khối lệnh sẽ không được lặp lại một lần nào. Ví dụ dưới đây tổng s vẫn
băng 0.
public class Sum
{
public static void
main(String[] args)
{
int s=0;
int i=100;
while(i<100)
{
i=i+1;
s=s+i;
}
System.out.println(“Tong
cac so tu 1 den 100 la” + s);
}
}
- Trong thân của khối lệnh luôn phải
chứa biều thức để làm thay đổi giá trị của bieuthuclogic. Trường hợp mà khối lệnh
không chứa, hoặc chứa nhưng giá trị của bieuthuclogic luôn đúng thì chương trình
sẽ treo. Ví dụ đoạn chương trình dưới đây sẽ treo.
public class Sum
{
public static void
main(String[] args)
{
int s=0;
int i=0;
while(i<100)
{
i=i;
s=s+i;
}
System.out.println(“Tong
cac so tu 1 den 100 la” + s);
}
}
Vòng lặp while được sử dụng chủ yếu
trong những trường hợp mà ta không thể biết được là chương trình sẽ được lặp lại
bao nhiêu lận. Dưới đây là một ví dụ như thế.
Ví
dụ 2.15. Viết chương trình tìm số tự nhiên n nhỏ nhất thoả mãn:
S=1/1+1/2+...+1/n>100
Trong bài toàn này ta biết rằng tổng S
trên sẽ tằng dần và khi n tiến tới vô cùng thì S sẽ bằng vô cùng. Nhưng vấn đề đặt ra là n tăng đến bao nhiêu thì S>100. Rõ
ràng là ta không thể nhẩm tính chính xác được. Vì vậy trong trường hợp này ta
không thể áp dụng vòng for được. Ta nghĩ đến việc sử dụng vòng lặp while. Đoạn
chương trình giải bài toán trên được viết như sau:
public class FindNumber
{
public static void
main(String[] args)
{
int s=0;
int i=0;
while(s<=100)
{
i=i+1;
s=s+1/i;
}
System.out.println(“So
tu nhien n nho nhat thoa man la” + i);
}
}
No comments :
Post a Comment