1.語法
for循環的基本語法如下:
for(①.聲明并初始化循環變量;②.判斷循環條件;④.改變循環變量值){
//③.循環體
}
語法說明:
1.for循環最先執行初始化步驟。在這里可以聲明一種類型,但可以初始化一個或多個循環控制變量,也可以是空語句;
2.判斷循環條件,檢測布爾表達式的值。如果為 true,循環體被執行。如果為false,循環終止,開始執行循環體后面的語句。且for循環的執行次數在執行前就已經是確定的。
3.執行一次循環后,就會更新一次循環控制變量的值;
4.再次檢測布爾表達式,循環執行上面的過程。
2. 執行流程
根據上面的for循環語法,壹哥把for循環的執行流程給大家做個詳細的解釋:
1.首先我們要在第①步聲明并初始化一個變量,該操作在循環中只會執行一次;
2.每次循環之前,在第②步判斷循環條件是否成立,只有當條件為true才會執行,如果條件為false則結束循環;
3.每次循環時,都會在③中執行循環體內的代碼;
4.每次循環結束后,會自動執行第④部分,改變變量的初始值;
5.for循環中①、②、④部分都可以省略不寫,但必須存在兩個”分號;“,也可以只寫一部分;
6.我們聲明變量類型時,不一定非得是int,最后改變初始值也不一定非得是++;
7.for循環中支持嵌套循環。
根據上面的步驟,壹哥把重點步驟給大家總結如下:
①-->②-->③-->④-->②-->③-->④-->②-->③-->④-.....-②
如下圖所示:
2.for循環的幾種寫法
2.1 基本for循環
基本for循環包括三個部分:循環變量初始化、循環條件判斷和循環變量更新。通常的形式如下:
for (int i = 0; i < n; i++) {
// 循環體
}
其中,i 是循環變量,n 是循環次數,循環體是需要重復執行的代碼。
2.2 foreach循環
foreach循環通常用于遍歷數組或集合中的元素。它的語法形式為:
for (類型 變量名 : 數組名) {
// 循環體
}
其中,類型 是數組或集合中元素的數據類型,變量名 是循環變量的名稱,數組名 是需要遍歷的數組或集合的名稱。循環體是需要重復執行的代碼。
例如,遍歷一個整型數組的方式如下:
int[] nums = {1, 2, 3, 4, 5};
for (int num : nums) {
System.out.println(num);
}
2.3 while循環
while循環會在滿足循環條件時重復執行代碼塊。它的語法形式為:
while (循環條件) {
// 循環體
}
其中,循環條件 是需要滿足的條件,循環體是需要重復執行的代碼。
例如,一個簡單的while循環如下所示:
int i = 0;
while (i < 10) {
System.out.println(i);
i++;
}
這個while循環會不斷地打印變量i的值,直到i的值達到10為止。
2.4 do-while循環
do-while循環與while循環類似,但它會先執行一次循環體,然后再檢查循環條件。它的語法形式為:
do {
// 循環體
} while (循環條件);
其中,循環體 是需要重復執行的代碼,循環條件 是需要滿足的條件。
例如,一個簡單的do-while循環如下所示:
int i = 0;
do {
System.out.println(i);
i++;
} while (i < 10);
這個do-while循環會先打印變量i的值為0,然后將i的值加1,并檢查i是否小于10,如果滿足則再次執行循環體。這個循環會執行10次,因為在第10次執行時,i的值為9,不再小于10。
2.5 簡寫形式
在for循行中,第①/②/④這幾部分的內容都是可以省略簡寫的。
public class Demo02 {
public static void main(String[] args) {
//簡寫形式1:在第一部分中簡寫變量的聲明
//int i = 0;
//for (; i < 100; i++) {
// System.out.println("小白學java,i=" + i);
//}
//簡寫形式2:在第①和④中簡寫
//int i = 0;
//for ( ; i < 100; ) {
// i++;
// System.out.println("小白學java,i=" + i);
//}
//簡寫形式3,①/②/④都簡寫--->死循環
int i = 0;
for (;;) {
i++;
System.out.println("小白學java,i=" + i);
}
}
}
我們一定要注意,如果是第三種簡寫形式,把①/②/④都簡寫了,就會成為死循環,本段程序會一直不停地打印下去。此時我們可以點擊控制臺的”紅色“按鈕停止程序的運行
3.for循環語句的用法
需求:循環輸出100遍 ”小白學java“
public class ForDemo {
public static void main(String[] args) {
//for循環,這里的i就是一個局部變量
for( int i=0; i<100; i++) {
System.out.println("小白學java,i="+i);
}
}
}
注意,上面for循環中定義的變量i就是一個局部變量哦!
需求:計算1-100的和,1+2+3+4+5+...+100
public class ForDemo02 {
public static void main(String[] args) {
// 計算1-100的和,1+2+3+4+5+...+100
//定義一個用于存儲”和“的局部變量
int sum = 0;
for (int i = 1; i <= 100; i++) {
// i = 1;
// sum=0+1;
// i = 2;
// sum= 1+2;
sum = sum + i;
}
System.out.println("sum=" + sum);
}
}
需求:打印出一個三角形,用“*”來表示。
public class ForDemo03 {
public static void main(String[] args) {
// for循環嵌套--打印出一個三角形,用“*”來表示
for (int i = 1; i <= 5; i++) {
//定義第2個局部變量j,j設置為<=i
for (int j = 1; j <= i; j++) {
//這里千萬不要換行哦
System.out.print(" * ");
}
//這里一定要換行哦
System.out.println();
}
}
}
需求:使用for循環產生20個1-100的隨機數,且這20個數互不相同:
import java.util.Random;
public class ForDemo03 {
public static void main(String[] args) {
int[] randomNumbers = new int[20];
Random random = new Random();
for (int i = 0; i < randomNumbers.length; i++) {
int newNumber;
boolean numberExists;
do {
newNumber = random.nextInt(100) + 1;
numberExists = false;
for (int j = 0; j < i; j++) {
if (randomNumbers[j] == newNumber) {
numberExists = true;
break;
}
}
} while (numberExists);
randomNumbers[i] = newNumber;
System.out.println(randomNumbers[i]);
}
}
}
注意:在上面的代碼中,我們使用了一個do-while循環,每次生成一個新的隨機數并檢查它是否已經存在于數組中。如果已經存在,則繼續生成新的隨機數,直到找到一個不存在于數組中的隨機數。然后將該隨機數存儲在數組中,并輸出到控制臺。
需求:打印出九九乘法表。
public class Demo02 {
public static void main(String[] args) {
// for循環嵌套--打印出一個三角形,用“*”來表示
for (int i = 1; i <= 5; i++) {
//定義第2個局部變量j,j設置為<=i
for (int j = 1; j <= i; j++) {
//這里千萬不要換行哦
System.out.print(" * ");
}
//這里一定要換行哦
System.out.println();
}
}
}
經常有朋友問:java循環長度的相同、循環體代碼相同的兩次for循環的執行時間相差了100倍這是為什么?
在這里給大家總結幾種情況:大家可以學習參考下:
1.編譯器優化:Java編譯器在編譯代碼時會進行一些優化,例如將代碼重構為更高效的形式,消除無用代碼等等。這些優化可能會使一個循環比另一個循環更快速地執行。
2.緩存:在循環執行期間,CPU會從內存中讀取數據并將其緩存在緩存中。如果兩個循環訪問的數據不同,或者訪問數據的方式不同,緩存效率可能會受到影響,從而導致執行時間的差異。
3.硬件差異:執行時間的差異也可能是由于硬件差異引起的,例如不同的CPU或內存速度。
4.其他因素:還有一些其他因素可能導致執行時間的差異,例如操作系統負載、線程競爭等等。
要確定造成執行時間差異的具體原因,可以使用性能分析工具來分析代碼的執行情況,例如VisualVM或Eclipse Memory Analyzer。這些工具可以幫助您確定循環中的瓶頸,并提供優化建議,以改善代碼的性能。