Chương 7: Vòng lặp
7.1) chọn loại vòng lặp cho hợp lí
Các vòng lặp đôi khi có thể dùng thay thế được cho nhau, nhưng chúng ta nên tùy tình huống mà dùng chúng sao cho linh hoạt và dễ hiểu
thực tế tùy vào từng bài toán ta cần giải dẫn đến các yêu câu sử dụng vòng lặp khác nhau. Một số loại vòng lặp:
+) Vòng lặp có thể đếm được số vòng lặp cụ thể
+)Vòng lặp được được lặp liên tục ta không biết được số lần thực thi +) Vòng lặp vô hạn lần
Tùy vào tính “cứng” hay “mềm ” của bài toán mà ta sử dụng vòng lặp
*) Vòng lặp while : thường dùng để kiểm tra điều kiện lúc bắt đầu
import java.util.Scanner;
public class Class1 {
public static void main(String arg[]) {
System.out.print("nhap gioi han : ");
float limit = nhap.nextFloat();
int dem = 0;
float tong = 0;
while(tong < limit){ dem++;
tong+= (float)1/dem; }
System.out.println("so nguyen nho nhat ma tong vuot qua gioi han la: "+dem);
}
}
Chương trình trên giải bài toán đặt T(n)= 1/1+1/2+1/3+…+1/n
Ta nhập vào một số gọi là limit(giới hạn), cần tìm số n nhỏ nhất sao cho T(n)>limit
ở đây ta thấy không thể đoán trước được số vòng lặp là bao nhiêu, ta sử dụng vòng lặp while là hợp lý
*) vòng lặp do-while : thường sử dụng để thực thi hành động trước khi kiểm tra điều kiện và cũng thường được áp dụng cho những tình huống mà ta cũng không kiểm soát số vòng lặp
import java.util.Scanner;
public static void main(String arg[]) {
int so = 0;
do {
Scanner nhap = new Scanner(System.in); System.out.print("nhap so vao : "); so = nhap.nextInt();
}
while (so < 10) ;
}
}
Chương trình trên đơn giản chỉ là nhập vào một số nguyên, công việc nhập vào dừng lại cho đến khi ta nhập được số lớn hơn 10 thì kết thúc
Nhìn lại bài toán, ta thấy luôn thực hiện được ít nhất một lần nhập, và số lần lặp cũng là không biết trước được => dùng cấu trúc do-while là hợp lý
Một chương trình khác cho thấy điểm mạnh của vòng lặp while so với vòng lặp for là chương trình tìm ước chung lớn nhất của hai số nguyên nhập vào từ bàn phím, ở đây ta dùng thuật toán của Euclide
import java.util.Scanner;
public class Class1 {
public static void main(String arg[]) { Scanner nhap = new Scanner(System.in); System.out.print("\nnhap so thu nhat : ");
int num1 = nhap.nextInt();
System.out.print("\nnhap so thu hai : ");
int num2 = nhap.nextInt();
while (num1 != num2) {
if (num1 > num2)
num1 = num1 - num2;
num2 = num2 - num1; }
System.out.print("\n uoc chung lon nhat la: " + num1); }
}
Ở đây số vòng lặp ta chưa biết trước, việc sử dụng while là hợp lý
*) Vòng lặp dùng với for : thường dùng cho các còng lặp ta kiểm soát được số lần lặp và mỗi lần lặp thực hiện một công việc nhất định
Ví dụ
import java.util.Scanner;
public class Class1 {
public static void main(String arg[]) { Scanner nhap = new Scanner(System.in); System.out.println("so gioi han la: ");
int limit = nhap.nextInt();
int sum = 0;
for(int i = 0; i < limit; i++){
if(i%2 == 0) sum+=i; }
System.out.println("tong cac so chan nho hon gioi han la :"+sum);
}
}
Chương trình trên giải bài toán nhập vào một số gọi là số giới hạn, sau đó tính tổng các số chãn nhỏ hơn nó rồi in ra kết quả, ở bài toán này ta đã biết trươc được số lần lặp.
Cấu trúc lạp for cũng thường hay được sử dụng cho vòng lặp thao tác với dãy (array) ví dụ với bài toán nhập vào dãy có 5 phần tử:
import java.util.Scanner;
public class Class1 {
public static void main(String arg[]) { Scanner nhap=new Scanner(System.in);
int[] anArray = new int[5];
/* nhap vao mang 5 so nguyen ta thuong dung vong lap for */
for(int i = 0; i < 5; i++){
System.out.print("a["+(i+1)+"]= "); anArray[i] = nhap.nextInt();
}
/* in ra man hinh gia tri mang vua nhap */
for (int i = 0; i < 5; i++)
System.out.println("a["+(i+1)+"]= "+anArray[i]);
}} }