簡體   English   中英

for循環如何遍歷數組?

[英]How does a for loop iterate through an array?

我試圖理解for循環實際上如何遍歷數組的背后邏輯。 以下面的示例為例,我將在其中使用Java:

int[] numbers = {5, 6, 7};

for(int i = 0; i < number.length; i++) {
    System.out.println(numbers[i]);
}

我不明白如何打印numbers[i]在整個數組中循環。 更具體地說,我不明白i是如何代表數組的內容的。

我將使用一個稍微不同的類比,因為很多答案都為您提供了正確的信息。

數組只是包含值的順序框的列表。 想象一下,這是一個房屋列表,每個房屋的編號從0(像許多其他編程語言一樣,在Java中的數組從0開始而不是1)到n (在您的情況下為2)開始。

因此,如果您是從每個房屋中收集捐款的人,那么您將從第一所房屋0開始,然后進入下一所房屋1,然后再到達下一所房屋2。您將跟蹤當前正在訪問的房屋,以便您還知道下一個是哪個,這就是i在做的整數變量。

打印numbers[i]不會使循環循環,就像敲開第一宮並不意味着您要敲開第二宮一樣。

for循環跟蹤您接下來需要訪問的門牌號。 它通過同一行中的3條語句來完成此操作:

for(int i = 0; i < number.length; i++)

第一句話是說從第一宮開始( int i = 0 )。 您可以從任何地方開始。

第二句話說,無論有多少房子,您都想上一所房子。 i < number.length )。 從字面上看,只要i小於數組的大小,就可以保持循環 您可能會問為什么條件<= 這是因為我們從0開始,所以長度(數組的大小)將是最后一個房子的數目+1。在您的情況下, length = 2 + 1

第三句話,是什么讓你搬到下一所房子。 i++是表示i = i + 1簡寫。 該語句在循環的每次迭代之后發生。

因此,實質上,您的for循環首先將i初始化為0,檢查條件(第二條語句),如果滿足條件,則進行第一次迭代,然后最終使i遞增,如果仍然滿足第二個條件,則開始另一次迭代。 重復此循環,直到for表達式的第二個語句不再成立為止。

最后,所有numbers[i]意思是,因為numbers是一個數組,所以[ ]運算符訪問指定索引處的值。 這就好比敲打i的房子,看看誰住在那兒。 將值提供給System.out.println()會在屏幕上打印該值。

以下是執行for循環的詳細信息(摘自本認證研究指南

名稱如下:

for(initialization code; 
    boolean expression; 
    update statements){
  body
}. 

for循環的各部分按以下順序執行:

  1. 初始化代碼
  2. 如果布爾表達式為true,則執行body,否則退出循環
  3. 身體執行
  4. 執行更新語句
  5. 返回步驟2

因此,當應用於您的示例時,我們可以說:

運行初始化:

int i = 0

迭代1:

if(i < number.length) // -> if(0 < 3)
//run body
i++ //i becomes 1
//return to step 2 (new iteration)

迭代2:

if(i < number.length) // -> if(1 < 3) //i was incremented to 1
//run body
i++ //i becomes 2
//return to step 2 (new iteration)

迭代3:

if(i < number.length) // -> if(2 < 3) //i was incremented to 2
//run body
i++ //i becomes 3

迭代4(不運行):

//return to step 2 (new iteration)
if(i < number.length) // -> if(3 < 3)  -> condition not met
//condition not met, stop the loop

更具體地說,我不明白我是如何表示數組的內容的

如上所示,每次循環體完成執行時,都會執行update語句,這會使i變量遞增,從而允許訪問數組的不同索引。

建議這樣做,如果將update語句更改為i += 2 ,則將跳過該數組的某些索引。

數組的值通過語法取出

numbers[index];

數組索引從0開始,然后從下一個2開始。...因此,為了檢索第一個元素,您需要

numbers[0];

同時,在for循環中,您創建了一個名為i的塊變量。 注意,盡管迭代,的值i增加1,因為i++

因此,在您的for循環中會發生這種情況。

numbers [0];
numbers[1];
numbers[2];

我認為您不了解for循環的工作原理。 請閱讀,

根據該文章,

for(initialization; condition ; increment/decrement){
   statement(s);
}

在此處輸入圖片說明

示例(這不是Java,而是JavaScript,但是for循環的工作方式相同; 不是請不要誤解。我只想向您展示一個有關i的值如何遞增的有效示例。)

 var i; for (i = 0; i < 10; i++) { console.log("i = " + i); } 

要從數組訪問信息,我們必須告訴數組我們要訪問數組的哪一部分。 為此,我們使用語法

array[index]

當使用for循環遍歷數組時,實際上是在使用array [index]從第一個元素到最后一個元素。

for (int i = 0; i < array.length; i++) 

從array [0]開始,並帶到array [lastElement]打印出數組的每個元素。

for(int i = 0; i < number.length; i++)是您的線索。

您在此處聲明的for循環指定了三個參數*:一個初始化變量,何時繼續循環以及每次迭代后要執行的操作:

  • int i = 0是初始化變量。 這是一個值為0的整數,僅存在於for循環內。
  • i < number.length告訴for循環,只要此條件成立,它就應該繼續在for循環內運行任何操作。 在這種情況下,這意味着只要i小於numbers數組的“長度”(或“大小”),它就應繼續運行。 也就是說,只要i小於3。
  • i++告訴for循環在每次迭代之后要做什么。 在這種情況下,您要告訴for-loop將變量i增加1。
  • System.out.println()是一種將內容打印到終端的方法
  • numbers[i]描述了您是否想要numbers數組的第i個索引中的任何元素。 也就是說,當i為2時,您希望元素位於第二索引中。 i為1時,您希望他在第一索引中。 重要說明 :Java數組的索引為零 ,這意味着數組中的第一個元素的索引為0,第二個元素的索引為1,依此類推。

什么發生在你的循環是在你所宣稱的循環。換句話說,應該有一個整數i與初始值0,它應該繼續這么長時間運行為i小於3,它應該增加i的每次運行時為1,並且每次循環運行時,都應在numbers數組的第i個索引處打印元素。

-

*“參數”可能不是正確的術語。

“數組將始終使用連續的存儲位置布置在內存中。編譯器知道數組從內存單元x開始。當需要到達a [123]時,它將x加上123並使用該數字來尋址內存進入元素。”

它們是連續的,索引從0開始。每個新元素在當前索引的下一個位置。 因此,您可以使用其索引訪問數組中的任何元素。

如果要寫numbers[i]表示數組中的第i個元素。 並且數組的最高索引總是小於數組的長度(數組的大小)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM