Java: Vòng Lặp For Và For Cải Tiến | V1Study
Có thể bạn quan tâm
- Đào tạo Độ tuổi từ 5 - 11 Độ tuổi từ 12 - 17 Từ 18 tuổi
- Lập trình Python Lập trình C C++ Java C# - C Sharp Android Scratch Pascal Robot mBot
- Web ReactJS HTML5 CSS3 JavaScript Node.js JSP ASP.NET Core jQuery PHP
- FW-CMS Laravel AngularJS Flutter Magento Bootstrap VueJS CodeIgnitor WordPress Sass Drupal
- Video Video Python Video Lập trình C Video C# Video Java Video HTML5-CSS3-JavaScript Video SQL Server Video PHP Video jQuery Video Android Video C++ Video Scratch
- Video1 Video XML-JSON Video MySQL Video Excel Video Giải thuật và Lập trình Video Sức khỏe Video Drupal Video mBot Video Giáo dục - Khoa học
- Other Unity Giải thuật và lập trình Giải thuật và lập trình - C CCNA Mạng máy tính Design Patterns English Facebook SEO Git Tin học đại cương Japanese App-Uti Download
- Data SQL Server XML JSON MySQL
- News
Vòng lặp for
Cú pháp
Vòng lặp for thường được sử dụng khi người dùng biết được số lần thực thi khối lệnh. Nó khá tương tự với vòng lặp while, trong đó khối lệnh trong thân của vòng lặp for được thực thi cho đến khi điều kiện được đề ra là sai. Cũng giống như vòng lặp while, điều kiện được kiểm tra trước khi khối lệnh được thực thi.
Cú pháp sử dụng cho câu lệnh là như sau:
for(khởi_tạo_biến_đếm; điều_kiện; thay_đổi_biến_đếm) {
// khối_lệnh
}
, trong đó,
khởi_tạo_biến_đếm: Là một biểu thức mà sẽ thiết lập giá trị khởi tạo cho biến đếm, đó là biến điều khiển vòng lặp.
điều_kiện: Làm một biểu thức boolean mà để kiểm tra giá trị của biến điều khiển vòng lặp có thỏa mãn điều kiện đề ra hay không. Nếu điều kiện là đúng thì khối_lệnh tiếp tục được thực thi, ngược lại thì dừng vòng lặp.
thay_đổi_biến_đếm: Bao gồm câu lệnh để thay đổi giá trị của biến đếm trong mỗi lần lặp. Thông thường trong câu lệnh dùng các toán tử tăng giảm như ++, --, hoặc các phép toán gán rút gọn như +=, -=. Không có dấu chấm phẩy (;) ở phía cuối của câu lệnh tăng giảm. Tất cả có ba phần khai báo được phân cách nhau bằng dấu (;).
Hình sau thể hiện luồng thực thi của vòng lặp for.
Như thể hiện, việc thực thi vòng lặp bắt đầu với phần khởi tạo (initialization), nói chung phần khởi tạo là một biểu thức dùng để thiết lập giá trị cho biến điều khiển vòng lặp và đóng vai trò như một biến đếm. Biểu thức khởi tạo được thực thi chỉ một lần duy nhất khi vòng lặp bắt đầu được thực thi. Tiếp theo, biểu thức điều kiện (condition) được thực hiện và kiểm tra xem biến điều khiển vòng lặp có thỏa mãn với giá trị đề ra hay không, nếu thỏa mãn thì thực hiện khối lệnh (statements), ngược lại thì thoát khỏi vòng lặp for.
Đoạn mã 1 sau thể hiện việc sử dụng vòng lặp for để hiển thị phép nhân với 10 của từng số từ 1 đến 5.
Đoạn mã 1:
public class PrintMultiplesWithForLoop {
public static void main(String[] args) {
int num, product;
//Vòng lặp for bao gồm 3 thành phần
for (num = 1; num <= 5; num++) {
product = num * 10;;
System.out.printf(“\n % d * 10 = % d “, num, product);
} //Chuyển điều khiển quay lại vòng lặp for mỗi khi lặp xong
}
}
Phân tích: Trong phần khởi tạo, biến num được khởi tạo là 1. Câu lệnh điều kiện num <= 5 sẽ đảm bảo rằng vòng lặp được thực thi trừng nào num còn nhỏ hơn hoặc bằng 5. Câu lệnh tăng, num++ sẽ tăng giá trị của num lên 1 sau mỗi lần lặp. Cuối cùng, vòng lặp kết thúc khi điều kiện trở thành sai, tức là khi biến num có giá trị bằng 6.
Output của đoạn mã 1 như sau:
Phạm vi của biến điều khiển trong vòng lặp for
Phần lớn các biến điều khiển chỉ được dùng trong vòng lặp for và không được sử dụng ở những nơi khác trong chương trình. Do vậy, ta có thể giới hạn phạm vi của nó bằng cách khai báo nó ngay khi khởi tạo giá trị cho nó.
Đoạn mã 2 viết lại vòng lặp for ở đoạn mã 1 trong đó khai báo biến đếm bên trong vòng lặp for.
Đoạn mã 2:
for (int num = 1; num <= 5; num++) {
//khối_lệnh
}
Sử dụng toán tử dấu phẩy trong vòng lặp for
Vòng lặp for có thể được mở rộng để cho phép có nhiều hơn một biểu thức khởi tạo hoặc biểu thức tăng/giảm bằng cách dùng toán tử (,) để phân cách các biểu thức này. Khi đó việc thực thi các biểu thức sẽ tuân theo thứ tự thực hiện từ trái sang phải. Thứ tự thực hiện này là quan trọng trong trường hợp giá trị của biểu thức thứ hai phụ thuộc vào giá trị tính toán được ở biểu thức thứ nhất.
Đoạn mã 3 cho thấy việc sử dụng vòng lặp để in ra một bảng tính cộng hai biến sử dụng toán tử (,).
Đoạn mã 3:
public class ForLoopWithComma {
public static void main(String[] args) {
int i, j;
int max = 10; /* Phần khởi tạo và phần tăng/giảm chứa đựng nhiều hơn một câu lệnh */
for (i = 0, j = max; i <= max; i++, j--) {
System.out.printf("\n%d + %d = %d", i, j, i + j);
}
}
}
Phân tích đoạn mã: 3 biến i, j, và max có kiểu nguyên int được khai báo, trong đó biến max ban đầu được gán trá trị là 10. Ở phần khởi tạo của vòng lặp for, i được gán giá trị 0 và j được gán giá trị của max (tức là 10), bạn thấy hai câu lệnh gán này phân cách nhau bằng dấu phẩy (,). Ở phần điều kiện ta có i <= max, tức là vòng lặp for sẽ được thực thi trừng nào giá trị chứa trong biến i còn nhỏ hơn hoặc bằng giá trị chứa trong biến max. Ở phần thứ 3 của vòng lặp for có hai câu lệnh là i++ và j--, điều này có nghĩa sau mỗi lần lặp thì giá trị trong biến i sẽ tằng 1 đơn vị và biến j sẽ giảm 1 đơn vị. Như vậy thì tổng giá trị chứa trong hai biến i và j sẽ luôn bằng nhau và bằng max sau mỗi lần lặp.
Kết quả của đoạn mã trên như sau:
Các dạng khác nhau của vòng lặp for
Cấu trúc của vòng lặp for làm cho nó trở lên mạnh mẽ và linh hoạt, cả ba thành phần của vòng lặp for không nhất thiết cứ phải được khai báo và sử dụng chỉ bên trong nó, nghĩa là bạn có thể bỏ qua hoặc để trống bất kỳ phần nào của vòng lặp for.
Đoạn mã 4 dưới đây thể hiện việc sử dụng vòng lặp for nhưng không có phần khởi tạo.
Đoạn mã 4:
public class ForLoopWithNoInitialization {
public static void main(String[] args) {
/* Biến đếm num được khai báo và khởi tạo ở ngoài vòng lặp for */
int num = 1;
/* Biến boolean flag được khởi tạo là false */
boolean flag = false;
/* Vòng lặp for được thực thi với giá trị ban đầu của biến num là 1 và lặp * trong khi giá trị của biến flag là not true */
for (; !flag; num++) {
System.out.println(“Value of num: “ + num);
if (num == 5) {
flag = true;
}
} //Kết thúc vòng lặp for
}
}
Vòng lặp for ở trên sẽ được thực thi cho đến khi flag được đặt là true. Kết quả của đoạn mã là như sau:
Vòng lặp for không xác định
Nếu tất cả ba biểu thức đều trống, thì sẽ dẫn đến một vòng lặp không xác định, lý do là bởi vì không có điều kiện để kiểm soát vòng lặp.
Đoạn mã 5 thể hiện vòng lặp for không xác định.
Đoạn mã 5:
.....
for( ; ; ) {
System.out.println(“This will go on and on”);
}
.....
Đoạn mã sẽ in ra 'This will go on and on' cho đến khi vòng lặp được ngắt bằng tay. Câu lệnh break có thể được sử dụng để ngắt vòng lặp. Vòng lặp không giới hạn làm cho chương trình chạy trong thời gian dài dẫn đến việc tiêu thụ tất cả các nguồn lực và dừng hệ thống. Vì thế, trong chương trình ta cần phải tránh những vòng lặp dạng như vậy.
Khi giá trị nhập vào của chương trình không được biết trước, thì ta có thể sử dụng loại vòng lặp không xác định trong chương trình, trong đó nó sẽ chờ cho đến khi người dùng nhập liệu. Vì vậy, khi người dùng nhập liệu, thì hệ thống sẽ xử lý đầu vào, sau đó lại bắt đầu thực thi vòng lặp vô hạn.
Vòng lặp for cải tiến
Java SE 5 trở đi đã mở rộng vòng lặp for cơ bản để tăng khả năng đọc của vòng lặp. Phiên bản mới của vòng lặp for thực thi theo kiểu 'for-each', còn được gọi với tên là vòng lặp for cải tiến.
Vòng lặp for cải tiến được thiết kế để truy xuất hoặc lặp thông qua tập hợp các đối tượng như mảng thông thường, ArrayList, LinkedList, HashSet, ... Những lớp này được định nghĩa trong framework tập hợp và được sử dụng để lưu các đối tượng.
Cú pháp sử dụng vòng lặp for cải tiến như sau:
Cú pháp:
for (type var : collection) {
// khối_lệnh
}
trong đó,
type: là kiểu của tập hợp.
var: là biến lặp dùng để lưu từng phần tử của tập hợp qua mỗi lần lặp. Vòng lặp for cải tiến sẽ lặp từ phần tử đầu đến phần tử cuối của tập hợp, mỗi lần lặp sẽ lấy một phần tử lưu vào biến var.
Sau khi lấy xong phần tử cuối của tập hợp thì vòng lặp sẽ kết thúc.
Đoạn mã 6 sau đây sử dụng vòng lặp for thường để nhập liệu cho mảng chuỗi str và dùng vòng lặp for cải tiến để in ra các phần tử của mảng chuỗi đó.
Đoạn mã 6:
package demo;
import java.util.Scanner;
public class Demo3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String[] str = new String[5];
System.out.println("Nhập liệu các chuỗi:");
for(int i=0; i<str.length; i++){
System.out.printf("Chuỗi thứ %d: ",i+1);
str[i] = input.nextLine();
}
System.out.println("Sau khi nhập liệu, ta được:");
for(String s : str){
System.out.println(s);
}
}
}
Output của đoạn mã trên như sau:
Vòng lặp lồng
Việc đặt một vòng lặp bên trong một vòng lặp khác thì gọi là vòng lặp lồng. Ví dụ, một vòng lặp while có thể được đặt trong vòng lặp do-while và một vòng lặp for có thể được đặt trong một vòng lặp while hoặc một vòng lặp for khác. Khi ta lồng hai vòng lặp, thì vòng lặp ngoài sẽ điều khiển số lần thực thực thi của vòng lặp bên trong. Cụ thể là với mỗi lần lặp của vòng lặp for ngoài thì vòng lặp bên trong sẽ được thực thi cho đến khi phần điều kiện của nó trở thành sai.
Số mức lồng nhau của các loại vòng lặp là không giới hạn. Trong thực tế thì ta hay bắt gặp sự lồng nhau của các vòng lặp for.
Đoạn mã 7 thể hiện việc sử dụng vòng lặp for lồng để hiển thị một mẫu.Code Snippet 10 demonstrates the use of a nested-for loop for displaying a pattern.
Đoạn mã 7:
public class DisplayPattern {
public static void main(String[] args) {
int row, col;
//Vòng lặp for ngoài thực thi 5 lần
for (row = 1; row <= 5; row++) {
/* Mỗi lần lặp for ngoài thì vòng lặp for trong sẽ lặp row lần */
for (col = 1; col <= row; col++) {
System.out.print(" * ");
} //Kết thúc vòng lặp for trong
System.out.println();
} //Kết thúc vòng lặp for ngoài
}
}
Phân tích đoạn mã: vòng lặp for ngoài bắt đầu với biến đếm row được khởi tạo giá trị ban đầu là 1. Giá trị trong row sẽ tăng dần qua câu lệnh row++ cho đến khi row>5. Thân của vòng lặp for ngoài chưa vòng lặp for trong, trong đó biến đếm col được khởi tạo giá trị ban đầu là 1. Vòng lặp for trong sẽ được thực thi cho đến khi col>row.
Mỗi khi thực hiện xong vòng lặp for bên trong thì quyền điều khiển lại chuyển ra thành phần thứ 3 của vòng lặp for ngoài để tăng biến đếm row 1 đơn vị, rồi chuyển sang thành phần thứ 2 để kiểm tra điều kiện, nếu điều kiện đúng thì tiếp tục thực hiện vòng lặp for trong.
Output của đoạn mã trên như sau:
* * * * * * * * * * * * * * *
So sánh giữa các loại vòng lặp
Lựa chọn vòng lặp nào vào lập trình là dựa trên thực tế hoặc kinh nghiệm lập trình của bạn. Bảng dưới đây sẽ so sánh các loại vòng lặp với nhau, giúp bạn hiểu rõ hơn về chúng.
while/for | do-while |
---|---|
Kiểm tra điều kiện trước, rồi mới thực thi khối lệnh. | Thực thi khối lệnh trước, rồi mới kiểm tra điều kiện. |
Nếu điều kiện sai ngay từ đầu thì không thực thi. | Thực thi ít nhất 1 lần ngay cả khi điều kiện sai ngay từ đầu. |
Bạn muốn tìm kiếm điều gì?
Từ khóa » Bài Tập Vòng Lặp For Trong Java
-
Vòng Lặp For Trong Java Với Ví Dụ Cụ Thể - Deft Blog
-
Luyện Tập Vòng Lặp Trong Java
-
Bài Tập Về Vòng Lặp Trong Java: Tính Tổng Các Số Từ N Về -5 - CodeLearn
-
Vòng Lặp For Trong Java - Học Java Miễn Phí Hay Nhất - VietTuts
-
Vòng Lặp For Trong Java - 155 Bài Học Java Miễn Phí Hay Nhất
-
Java Basic- Ôn Luyện Về Vòng Lặp For, While, Do-while Trong Java
-
Vòng Lặp For Trong Java | How Kteam
-
Java: Solution Bài Tập Phần Vòng Lặp | V1Study
-
[Tự Học Java] Vòng Lặp For Trong Java »
-
Vòng Lặp For Trong Ngôn Ngữ Java - Lập Trình Không Khó
-
Vòng Lặp For Trong Java - KungFu Tech
-
Bài 1: Bài Tập Làm Quen Với Java - VnCoder
-
Vòng Lặp For, While, Do - While Trong Java - IT DESIGN - Thầy Nhuộm