for循环如何遍历数组?

时间:2018-09-20 13:31:51

标签: java arrays loops for-loop logic

我试图理解for循环实际上如何遍历数组的背后逻辑。以这个例子为例,我将在其中使用Java:

 <logger name="org.eclipse.jetty.util" level="INFO"/>

我不了解打印int[] numbers = {5, 6, 7}; for(int i = 0; i < number.length; i++) { System.out.println(numbers[i]); } 如何遍历整个数组。更具体地说,我不明白numbers[i]是如何表示数组的内容。

6 个答案:

答案 0 :(得分:4)

我将使用一个稍微不同的类比,因为很多答案都为您提供了正确的信息。

数组只是包含值的连续框的列表。想象一下,这是一个房屋列表,每个房屋的编号从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小于数组的大小,这就会转化为 keep循环。您可能会问为什么条件<=不是。这是因为我们从0开始,所以长度(数组的大小)将是最后一个房子的数量+1。在您的情况下,length = 2 + 1

第三句话,是什么让你搬到下一所房子。 i++i = i + 1的简写。该语句在循环的每次迭代之后发生。

因此,基本上,您的for循环首先将i初始化为0,检查条件(第二条语句),如果满足条件,则进行第一次迭代,然后最终递增i,如果第二次开始,则开始另一个迭代条件仍然令人满意。重复此循环,直到for表达式的第二个语句不再成立为止。

最后,所有numbers[i]的意思是,由于numbers是一个数组,[ ]运算符访问指定索引处的值。因此,就像用数字i敲房子看看谁住在那里。将值输入System.out.println()会在屏幕上显示该值。

答案 1 :(得分:2)

以下是执行for循环的详细信息(源自this certification study guide

以下简称:

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变量递增,从而允许访问数组的另一个索引。

建议这样做,如果将更新语句更改为i += 2,则将跳过该数组的某些索引。

答案 2 :(得分:1)

数组的值通过语法取出

numbers[index];

数组索引从0开始,然后从下一个2开始。...因此,为了检索您需要的第一个元素

numbers[0];

同时在for循环中,您创建了一个名为i的块变量。请注意,在进行迭代时,由于ii++的值增加了1。

所以在您的for循环中会发生这种情况。

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

我认为您不了解for循环的工作方式。请阅读

根据该文章

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

enter image description here

示例(这不是Java,而是JavaScript,但是for循环的工作方式相同; 不是 ,请不要误解。我只是希望向您展示一个有关i的值如何递增的有效示例。)

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

答案 3 :(得分:1)

要访问数组中的信息,我们必须告诉数组我们要访问数组的哪一部分。为此,我们使用语法

array[index]

当您使用for循环遍历数组时,实际上是在使用array [index]从第一个元素到最后一个元素。

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

将从array [0]开始并带到array [lastElement]打印出数组的每个元素。

答案 4 :(得分:1)

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]描述了您想要i数组中第numbers个索引中的任何元素。也就是说,当i为2时,您希望元素位于第二索引中。当i为1时,您希望他在第一索引中。 重要说明:Java数组是zero-indexed,这意味着数组中的第一个元素的索引为0,第二个元素的索引为1,依此类推。

在循环中发生的事情就是换句话说,您正在声明一个循环,应该有一个初始值为0的整数i,并且只要i就可以继续运行小于3,则每次运行时都应将i递增1,并且每次循环运行时,都应在i数组的第numbers个索引处打印元素

-

*“参数”可能不是正确的术语。

答案 5 :(得分:0)

“数组将始终使用连续的存储位置放置在内存中。编译器知道数组从内存单元x开始。当需要到达a [123]时,它将123加到x上并使用该数字寻址内存以访问元素。”

它们是连续的,索引从0开始。每个新元素在当前索引的下一个位置。因此,您可以使用其索引访问数组中的任何元素。

如果您正在编写numbers[i],则表示数组中的第i个元素。并且数组的最高索引总是小于数组的长度(数组的大小)。