Java: Vòng Lặp For Và For Cải Tiến | V1Study

Học viện Đào tạo và Công nghệ V1Study
  • Đà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
Học viện Đào tạo và Công nghệ V1Study ≡ Java Java Core Giới thiệu Download, cài đặt và chạy Kiểu dữ liệu Từ khóa, tên riêng, ghi chú Biến & Hằng Phép toán (Operator) Nhập liệu với Scanner và System.in.read() Bài tập Java cơ bản Điều kiện if-else Điều kiện switch-case Bài tập phần điều kiện Vòng lặp for và for cải tiến while do-while break và continue Bài tập phần vòng lặp Mảng một chiều trong Java Mảng hai chiều trong Java Bài tập phần mảng số Bài tập phần chuỗi và mảng chuỗi Hàm (Function) Bài tập phần hàm ArrayList trong Java Quản lý bộ nhớ trong Java Tìm hiểu về đối tượng StringBuilder trong Java Cách xuống dòng mới khi dùng NetBean hay IntelliJ enum trong Java Hướng đối tượng (OOP) Lớp (Class) và Đối tượng (Object) Truy cập các thuộc tính và phương thức của đối tượng Hàm tạo (Constructor) Bộ khởi tạo cho đối tượng Từ khóa this Bài tập phần Class Từ khóa static Thừa kế (Inheritant) Ghi đè phương thức (Override) Từ khóa super Đa hình (Polymorphism) Bài tập phần Thừa kế & Đa hình Đóng gói (Encapsulation) Trừu tượng (Abstract) Interface (Giao diện) Bài tập phần Abstract Class & Interface Kiểu liệt kê Lớp lồng nhau (Nested Classes) Exceptions Ngoại lệ là gì? Bắt hoặc chỉ định yêu cầu Khối try Khối catch Khối finally Câu lệnh try-with-resources Cách sử dụng try-catch-finally Xác định những ngoại lệ được ném bởi một phương thức Dùng throw để ném ngoại lệ Ngoại lệ kết chuỗi (Chained Exception) Tạo lớp ngoại lệ Ngoại lệ unchecked - Tranh luận Ưu điểm của ngoại lệ throw và throws Ngoại lệ tự định nghĩa KIỂM TRA KIẾN THỨC EXCEPTION Câu hỏi và bài tập phần Exception Functions Hàm xử lý chuỗi (String) Hàm toán học (Math) Hàm Date & Time Video Demo Nhập liệu bằng Scanner trong Java In các số từ 0 đến 100 dùng vòng lặp for Xác định tính nguyên tố Cách khai báo biến trong Java Xác định chính phương Xác định số nguyên hay thực Tìm số nguyên tố trong một khoảng In ra các số chẵn chia hết cho 3 Giải phương trình bậc nhất Giải phương trình bậc hai Nguyên âm, phụ âm hay ký số Cách tạo lớp và đối tượng Cách tạo các getter và setter Cách định nghĩa hàm tạo Cách sử dụng các getter và setter Cách tạo mảng Cách nhập liệu cho mảng Cách tìm Max và Min trong mảng Cách sắp xếp mảng Xóa phần tử có chỉ số cụ thể khỏi mảng Xóa phần tử chứa giá trị cụ thể khỏi mảng Cách dùng ArrayList và viết chương trình dạng Menu Nhập vào 10 số nguyên rồi loại bỏ những giá trị trùng lặp Xóa những phần tử trùng nhau Tuts Cách thay đổi kích thước text trong IntelliJ Một số phím tắt trong IntelliJ IDEA Cách tạo ảnh nền cho jFrame Form Cách sử dụng các class từ project khác API Collection Sắp xếp trong collection Gói java.util Framework Collections Interface Collection List ArrayList Vector LinkedList Set SortedSet HashSet LinkedHashSet Lớp TreeSet Map HashMap Hashtable TreeMap LinkedHashMap Queue PriorityQueue Arrays Sắp xếp Collections Các cải tiến trong các lớp Collections KIỂM TRA KIẾN THỨC COLLECTIONS CÂU HỎI VÀ BÀI TẬP COLLECTIONS Phương thức Collections.synchronizedList() và ví dụ So sánh ArrayList và Vector Generics Tổng quan về Generics Lớp generic Phương thức generic Kiểu suy luận (Type Inference) Collection và Generic Khả năng tương tác với Generics KIỂM TRA KIẾN THỨC GENERICS CÂU HỎI VÀ BÀI TẬP GENERICS Regular Expression Giới thiệu biểu thức chính quy Kiểm tra dữ liệu (Test Harness) Hằng chuỗi Lớp Character Các lớp ký tự định nghĩa trước Bộ định lượng (Quantifier) Nhóm thu thập So khớp ranh giới Các phương thức của lớp Pattern Các phương thức của lớp Matcher Các phương thức của lớp PatternSyntaxException Hỗ trợ Unicode Lớp Pattern Lớp Matcher Bài tập phần Biểu thức chính quy Gói java.lang Giới thiệu Lớp Object Bộ dọn rác (Garbage Collector) Các lớp Wrapper Hàm toán học (Math) Lớp System Lớp Class Hàm xử lý chuỗi (String) KIỂM TRA KIẾN THỨC JAVA.LANG Taught Thừa kế (Inheritant) Chữa bài tập 1 phần thừa kế Trừu tượng (Abstract) và Đa hình (Polymorphism) Interface Lớp generic try-catch-finally Thao tác với MySQL Java IO Giới thiệu I/O Stream Byte Stream Character Stream Buffered Stream Scanning và Formatting I/O từ Command Line Data Stream Object Stream Đường dẫn là gì? (và sự kiện hệ thống tập tin khác) Lớp Path Các hoạt động với File Kiểm tra tập tin hoặc thư mục Xóa tập tin hoặc thư mục Sao chép tập tin hoặc thư mục Di chuyển tập tin hoặc thư mục Quản lý siêu dữ liệu (File và File lưu các thuộc tính) Đọc, ghi và tạo tập tin Tập tin truy cập ngẫu nhiên Tạo và đọc thư mục Liên kết, liên kết tượng trưng hay không phải Đi bộ qua cây tập tin Tìm tập tin Quan sát sự thay đổi thư mục Các phương thức hữu dụng khác Kế thừa mã lệnh tập tin I/O Cách tạo và chèn dữ liệu vào file Excel Java DOM Parser - Đọc, tạo, sửa tài liệu XML KIỂM TRA KIẾN THỨC JAVA IO Câu hỏi và bài tập phần java.io file Java NIO Lớp Console Gói java.util.zip Lớp Deflater Lớp Inflater Lớp DeflaterInputStream Lớp DeflaterOutputStream Các lớp InflaterInputStream và InflaterOutputStream Gói java.nio Lớp Files và các thuộc tính KIỂM TRA KIẾN THỨC JAVA NIO Concurrency - Thread Tiến trình (Progress) và Luồng (Thread) Định nghĩa và khởi tạo Thread Dừng thực thi với phương thức Thread.sleep() Ngắt và kết nối Thread Ví dụ SimpleThreads Giao thoa luồng Lỗi nhất quán bộ nhớ Phương thức đồng bộ hóa Khóa nội tại và đồng bộ hóa Truy cập atomic Liveness Khối bảo vệ Đối tượng bất biến Đối tượng Lock Giao diện (interface) Executor Thread Pool Framwork Fork/Join Gói concurrent Biến atomic Số ngẫu nhiên đồng thời Câu hỏi và bài tập phần Concurrency - Thread Thread Swing Về JFC và Swing Biên dịch và chạy chương trình Swing Học Swing với NetBeans IDE Thiết lập dự án CelsiusConverter Cơ bản về IDE NetBeans Tạo giao diện CelsiusConverter Điều chỉnh giao diện CelsiusConverter Thêm logic cho ứng dụng Cách dùng bộ chứa mức top Lớp JComponent JScrollPane JSlider Giới thiệu về Timer JProgressBar Cách sử dụng Text Component JFormattedTextField Cách sử dụng ButtonGroup Cách sử dụng Color Chooser Cách tạo hộp thoại (Dialog) JEditorPane Cách sử dụng nhãn (Label) Cách sử dụng Panel Cách sử dụng Password Field Cách sử dụng Slider (JSlider) Cách sử dụng Tabbed Pane Cách sử dụng bảng (Table) Text Area Cách sử dụng Text Field (JTextField) Cách sử dụng Tool Bar Cách sử dụng Tool Tip Cách sử dụng Tree Cách sử dụng HTML trong Swing Component JTextPane Cách sử dụng đường bao (Border) Cách sử dụng Icon Demo-Calculator-V1 Kiểm tra kiến thức Swing-JDBC Cách sử dụng JList Bài hướng dẫn số 1 JDBC Database Access Giới thiệu JDBC Kiến trúc JDBC Tổng quan về cơ sở dữ liệu quan hệ Thiết lập kết nối Cách kết nối tới các RDBMS trong Java JDBC Ví dụ Commit và Rollback Kết nối Cơ sở dữ liệu Java với MySQL Demo Java Select, Insert, Update, Delete với MySQL BÀI TẬP PHẦN JDBC Code ví dụ về serverTimezone Lập trình truyền thông Tổng quan về lập trình truyền thông References InputStream isWhitespace Format String Syntax Class Paths toUri toAbsolutePath toRealPath equals startsWith endsWith Phương thức iterator() Interface Comparator<T> Interface Comparable<T> Class Files Interface Closeable Class FileSystemException Class FileSystem Enum LinkOption Class FileTime Interface BasicFileAttributes Interface PosixFileAttributes Class PosixFilePermissions Class UserPrincipalLookupService Class FileStore Interface BasicFileAttributeView Interface DosFileAttributeView Interface PosixFileAttributeView Interface FileOwnerAttributeView Interface AclFileAttributeView Interface UserDefinedFileAttributeView Interface DosFileAttributes Cách dùng NetBeans IDE Class Scanner Đóng và mở Form trong Java Swing Lấy kích thước của Form hiện thời Sửa chiều rộng của phần tử con bằng chiều rộng phần tử cha i18n Examples Ví dụ lớp Copy Ví dụ lớp Chmod Ví dụ lớp Xdd Ví dụ lớp DiskUsage Ví dụ HelloWorldSwing Ví dụ lớp TopLevelDemo BoxAlignmentDemo BorderDemo BoxLayoutDemo IconDemoApp FormattedTextFieldDemo ButtonDemo ButtonHtmlDemo TextAreaDemo TextDemo TextSamplerDemo HtmlDemo BasicDnD FocusConceptsDemo TabbedPaneDemo TableRenderDemo TableToolTipsDemo ActionDemo PasswordDemo TextFieldDemo DialogDemo TextInputDemo TreeDemo TreeIconDemo TreeIconDemo2 ComboBoxDemo ComboBoxDemo2 DynamicTreeDemo GenealogyExample TreeExpandEventDemo TreeExpandEventDemo2 CheckBoxDemo ListDialog LabelDemo SplitPaneDemo SliderDemo2 TableDialogEditDemo TextComponentDemo ColorChooserDemo ToolBarDemo ToolBarDemo2 ScrollDemo ScrollDemo2 TableDemo ButtonTabComponent TabComponentDemo TabbedPaneDemo Converter ListDemo TableSelectionDemo SimpleTableDemo SimpleTableSelectionDemo TableFTFEditDemo TableSortDemo TableFilterDemo TablePrintDemo ListSelectionDemo SharedModelDemo IntegerEditor TableSorter ColorRenderer TableSorterDemo ColorEditor CustomDialog Framework ListOfNumbers ListOfNumbers2 SliderDemo ColorChooserDemo2 RadioButtonDemo SpinnerDemo SpinnerDemo2 SpinnerDemo3 SpinnerDemo4 ListDataEventDemo CustomComboBoxDemo Đồng hồ số với thread Hiển thị ảnh trên JPanel Practicals Bài tập phần Swing - Practical 1 - Form Bài tập phần Swing - Practical 2 - Event Bài tập phần Swing - Practical 3 - JSlider - JProgressBar Bài tập phần Swing - Practical 4 - Data JDBC Bài tập phần Swing - Practical 5 - Game xếp số Test Java1 Solutions Solution phần Java IO Solution tham khảo Bài tập phần Class Solution Practical 1 Solution phần Exception Hệ thống quản lý số điện thoại Hệ thống quản lý tin tức (news) Solution câu hỏi và bài tập phần Generics Solution câu hỏi và bài tập Collections Solution Concurrency-Thread Solutions I18N Solution bài tập phần vòng lặp JavaFX Tổng quan JavaFX Cài đặt JavaFX Kiến trúc của JavaFX Cấu trúc ứng dụng JavaFX và ví dụ Tạo hình dạng 2 chiều (2D) Vẽ đoạn thẳng 2D Vẽ hình chữ nhật 2D Vẽ hình chữ nhật tròn 2D Vẽ đường tròn/hình tròn 2D Vẽ hình elip 2D Vẽ hình đa giác (Polygon) 2D Vẽ đa giác mở (Polyline) 2D Vẽ đường cong hình khối (CubicCurve) 2D Vẽ đường cong bậc 2 (QuadCurve) 2D Vẽ cung (Arc) 2D Vẽ hình SVG 2D Phần tử đường dẫn LineTo 2D Phần tử đường dẫn HLineTo 2D Phần tử đường dẫn VLineTo 2D Phần tử đường dẫn QuadCurveTo 2D Phần tử đường dẫn CubicCurveTo 2D Phần tử đường dẫn ArcTo 2D Thao tác Union Thao tác Intersection Thao tác Subtraction Tạo văn bản (Text) Hiệu ứng chỉnh màu (ColorAdjust) Hiệu ứng nhập màu (ColorInput) Hiệu ứng nhập ảnh (ImageInput) Hiệu ứng trộn (Blend) Hiệu ứng nở (Bloom) Hiệu ứng phát sáng (Glow) Hiệu ứng làm mờ hộp (BoxBlur) JUnit Tổng quan về JUnit Thiết lập môi trường Framework kiểm thử JUnit Cách sử dụng cơ bản API Viết chương trình kiểm thử Sử dụng Assertion Thủ tục thực thi Thực thi các test Test suite Bỏ qua test Thời gian test Ngoại lệ (Exception) test Tham số hóa test Chạy JUnit bằng Ant Thiết lập JUnit với Eclipse Phần mở rộng JUnit với Netbeans IDE Thiết lập JUnit test trong IntelliJ Java: Vòng lặp for và for cải tiến Khóa học qua video: Lập trình Python All Lập trình C# All SQL Server All Lập trình C Java PHP HTML5-CSS3-JavaScript Đăng ký Hội viên Tất cả các video dành cho hội viên

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.

Luông thực thi 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:

Output của vòng lặp for đơn giản

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++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:

Output của vòng lặp for dùng toán tử dấu phẩy (comma)

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:

Output của vòng lặp for không có phần khởi tạo

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:

Output vòng lặp for cải tiến

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.
» Tiếp: while « Trước: Điều kiện switch-case Khóa học qua video: Lập trình Python All Lập trình C# All SQL Server All Lập trình C Java PHP HTML5-CSS3-JavaScript Đăng ký Hội viên Tất cả các video dành cho hội viên Khóa học qua video: Lập trình Python All Lập trình C# All SQL Server All Lập trình C Java PHP HTML5-CSS3-JavaScript Đăng ký Hội viên Tất cả các video dành cho hội viên Copied !!! Copy linkCopied link!
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