Chương 7: Vòng lặp
7.7) các biến index cho vòng lặp (đặc biệt là vòng lặp for)
Theo thói quen thông thường tên biến chạy trong vòng lặp for thường được kí hiệu là i,j,k… và thường được khai báo trong vòng for để giảm scope của biến và sử dụng được cùng một tên biến trong nhiều vòng lặp, điều này tránh sự nhầm lẫn khi viết chương trình. Một điều cần lưu ý nữa là khi dùng các biến vòng lặp ta phải sử dụng sao cho thời gian sống của biến là ngắn nhất, thường thì ta bắt đầu khai báo biến khi bắt đầu viết vòng lặp, và biến chỉ có giá trị trong vòng lặp đó, như vậy khi viết sang vòng lặp khác ta có thể sử dụng lại tên biến đó
Ví dụ chương trình viết ra màn hình các số tự nhiên nhỏ hơn một số nhập nguyên dương nhập vào
import java.util.Scanner;
public class Class1 {
public static void main(String arg[]) { Scanner nhap=new Scanner(System.in); System.out.print("so gioi han : ");
int limit = nhap.nextInt();
for (int i = 0; i < limit; i++) System.out.print(" "+i); }
}
Một ví dụ khác cho thấy việc sử dụng biến chạy trong vòng lặp hiệu quả, làm tối thiểu vòng đời sống của biến, chương trình là mô tả một đồ thị vô hướng có trọng số (mô tả dưới dạng ma trận)
import java.util.Scanner;
public class Graph {
public int n;
public Graph(int n) {
this.n = n; }
public void nhapGraph() {
a = new int[n + 1][n + 1];
Scanner nhap = new Scanner(System.in);
for (int i = 1; i < n; i++)
for (int j = i + 1; j <= n; j++) {
System.out.print("a[" + i + "][" + j + "]=");
a[i][j] = nhap.nextInt(); }
for (int i = 1; i <= n; i++)
a[i][i] = 0;
for (int i = 2; i <= n; i++)
for (int j = 1; j < i; j++)
a[i][j] = a[j][i]; }
public void display() {
for (int i = 1; i <= n; i++) { System.out.print("\n");
for (int j = 1; j <= n; j++)
System.out.print(" a[" + i + "][" + j + "]=" + a[i] [j]);
}} }
public static void main(String arg[]) { Graph aGraph = new Graph(3); aGraph.nhapGraph();
aGraph.display(); }
Ở ví dụ trên ta thấy sử dụng rất nhiều các vòng lặp và ta sử dụng các biến i, j nhiều lần nhưng vẫn đảm bảo chương tình chạy đúng và rõ ràng.
Đôi khi với các bài toán liên quan đến nhiều vòng lặp nồng nhau thì việc đặt tên biến chạy lại là vấn đề dễ gây nhầm lẫn và làm cho khó đọc ví dụ sau minh họa cho điều này, chương trình tính doanh thu của công ty từ các cửa hàng (của công ty) từ các sản phẩm , nó là tổng của các phần tử một mảng ba chiều : doanhThu[month][idStore][idProduct] : doanh thu từ việc bán sản phẩm thứ idProduct tại của hàng thứ idStore vào tháng thứ month
import java.util.Scanner;
public class ApplicationClass {
public static void main(String arg[]) {
int[][][] doanhThu = new int[12][4][5]; Scanner nhap = new Scanner(System.in);
int sum = 0;
for (int month = 1; month <= 12; month++)
for (int idStore = 1; idStore <= 2; idStore++)
for (int idProduct = 1; idProduct <= 2; idProduct++) { System.out.print("\n loi nhuan thang" + month
+ "cua hang thu" + idStore + "mat hang thu"
+ idProduct + "= ");
doanhThu[month][idStore][idProduct] = nhap.nextInt();
}
for (int month = 1; month <= 12; month++)
for (int idStore = 1; idStore <= 2; idStore++)
for (int idProduct = 1; idProduct <= 2; idProduct++) sum += doanhThu[month][idStore][idProduct]; System.out.print("\n doanh thu cua cong ty la: " + sum);
}
Ta thấy nếu trong bài tập này ta sử dụng các biến i , j, k thay cho month, idStore, idProduct thì bài toán nhìn sẽ rất rối và người nhập dữ liệu vào rất dễ nhập nhầm, nên việc ghi dõ tên các biến ra ở đây sẽ giúp chương trình dễ đọc hơn