人們說最好的程式設計師是懶惰的程式設計師。他不會多次執行相同類型的操作,而是會想出一個演算法來為他完成這項工作。而且他會做得很好,這樣就沒有必要重做。 為了避免一遍又一遍地編寫相同的程式碼,循環被發明了。假設我們需要將0到99的數字顯示到控制台,沒有循環的程式碼:
System.out.println(0);
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
// And so on
這段程式碼需要 100 行!很多。這是使用循環時的樣子:
for(int i = 0; i < 100; i++) {
System.out.println(i);
}
只需3行!
什麼是 for 迴圈?
for迴圈是一種程式碼的控制結構,它打破了演算法執行的線性性,讓您可以多次執行指定的程式碼。例如,您需要服用30滴藥。該演算法將是這樣的:- 準備一個玻璃杯。
- 打開蓋子。
- 獲取 1 滴。
- 獲取 2 滴。 ……
- 獲得30滴。
- 關閉藥。
- 取出收到的部分。
- 準備一個玻璃杯。
- 打開滴水蓋。
- 取得 30 滴。
- 關閉藥。
- 取出收到的部分。
for 迴圈如何運作
for 迴圈的使用方式如下:for(<начальная точка>; <condition выхода>; <операторы счетчика>) {
// Loop body
}
Пример перебора цифр от 0 до 5 и вывод каждой в консоль:
for(int i = 0; i < 5; i++) {
System.out.println(i);
}
結論:
0
1
2
3
4
如果我們將此條目翻譯成人類語言,我們會得到以下內容:“創建初始值為 0 的變數 i,直到達到 5,加 1,並在每一步將 i 的值寫入控制台。” Java中的for迴圈是基於三個階段,可以用下圖表示: 退出迴圈的條件是一個布林表達式。如果為假,則循環結束。在上面的範例中,變數i
增加 1。如果其值小於 5,則循環繼續。但一旦i
大於或等於5,循環就會停止。計數器運算子是對計數器變數執行轉換的表達式。在上面的範例中,變數i
增加了 1。也就是說,迴圈將恰好執行 5 次。如果計數器運算子將 2 加到變量i
,結果將會不同:
for(int i = 0; i < 5; i = i + 2) {
System.out.println(i);
}
結論:
0
2
4
您也可以對變數進行乘法、除法、求冪,一般來說,您可以做任何您想做的事情。最主要的是轉換結果是一個數字。 循環體是任何可以執行的程式碼。在上面的範例中,循環體將變數 i 的值輸出到控制台,但該循環體的內容受到任務和想像的限制。總結整個方案,這個for迴圈的原理如下:在達到退出迴圈的條件之前,迴圈體中的程式碼將被執行與計數器運算子執行的轉換次數一樣多的次數。 。如果將循環退出條件設為true
:
for(int i = 0; true; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
那麼循環之後的程式碼將被標記為錯誤unreachable statement
,因為它永遠不會被執行。獨創性挑戰:運行下面的程式碼,Loop ended
控制台會輸出「 」還是會無限循環?
for(int i = 0; i > -1; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
答:會有的。變數i遲早會達到其最大值,進一步增加將使其變為最大負值,從而滿足退出條件(i < = -1)。
forEach循環
使用循環時,有時必須迭代數組或集合。通常,您可以使用 for 迴圈遍歷陣列:public void printAllElements(String[] stringArray) {
for(int i = 0; i < stringArray.length; i++) {
System.out.println(stringArray[i]);
}
}
這是對的。然而,為了一一迭代數組的所有元素,他們提出了 forEach 結構。其簽名如下:
for(<Тип element> <Name переменной, куда будет записан очередной элемент> : <Название массива>) {
// Loop body
}
您可以透過以下方式迭代字串陣列並將每個字串列印到控制台:
public void printAllElements(String[] stringArray) {
for(String s : stringArray) {
System.out.println(s);
}
}
又短又簡潔。最重要的是,不需要考慮計數器和退出條件,一切都已經為我們做好了。
如何使用 for 循環
現在讓我們來看幾個在Java中使用for迴圈來解決各種問題的範例。逆循環(從大到小)
for(int i = 5; i > 0; i--) {
System.out.println(i);
}
結論:
5
4
3
2
1
循環體中的幾個變數和遞增計數器
您可以在 for 迴圈中使用多個變量,例如可以在 counter 語句中轉換它們:int a = 0;
for(int i = 5; i > 0; i--, a++) {
System.out.print("Step: " + a + " Meaning: ");
System.out.println(i);
}
結論:
Шаг: 0 Значение: 5
Шаг: 1 Значение: 4
Шаг: 2 Значение: 3
Шаг: 3 Значение: 2
Шаг: 4 Значение: 1
或聲明兩個變數並循環直到它們彼此相等:
for(int i = 5, j = 11; i != j; i++, j--) {
System.out.println("i: " + i + " j: " + j);
}
結論:
i: 5 j: 11
i: 6 j: 10
i: 7 j: 9
此操作不太可能有任何價值,但了解這種可能性很有用。您也可以在 for 迴圈內建立內部迴圈。在這種情況下,循環步驟數將會倍增:
for(int i = 0; i < 5; i++) {
System.out.print(i + " | ");
for(int j = 0; j < 5; j++) {
System.out.print(j + " ");
}
System.out.print('\n');
}
結論:
0 | 0 1 2 3 4
1 | 0 1 2 3 4
2 | 0 1 2 3 4
3 | 0 1 2 3 4
4 | 0 1 2 3 4
在計數器循環中,j
可以存取外部循環的計數器。這使得嵌套循環成為遍歷二維、三維和其他數組的理想方式:
int[][] array = { {0, 1, 2, 3, 4 },
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
{3, 4, 5, 6, 7}};
for(int i = 0; i < array.length; i++) {
for(int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.print('\n');
}
結論:
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
提前完成周期
如果在處理循環時需要中斷循環,請使用運算符break
,它會停止循環的目前主體。所有後續迭代也將被跳過:
public void getFirstPosition(String[] stringArray, String element) {
for (int i = 0; i < stringArray.length; i++) {
if(stringArray[i].equals(element)) {
System.out.println(i);
break;
}
}
}
此方法將列印數組中第一個搜尋元素的位置:
String[] array = {"one", "two", "three", "Jeronimo"};
getFirstPosition(array, "two");
結論:
1
無限循環
創建無限 for 迴圈的另一種方法是將計數器宣告區域、退出條件和計數器語句留空:for (;;) {
}
但請記住,在大多數情況下,無限循環是邏輯錯誤的證據。這樣的循環必須有退出條件。
GO TO FULL VERSION