我试图理解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]
是如何表示数组的内容。
答案 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循环的各部分按以下顺序执行:
因此,当应用于您的示例时,我们可以说:
运行初始化:
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
的块变量。请注意,在进行迭代时,由于i
,i++
的值增加了1。
所以在您的for循环中会发生这种情况。
numbers [0];
numbers[1];
numbers[2];
我认为您不了解for
循环的工作方式。请阅读
根据该文章
for(initialization; condition ; increment/decrement){
statement(s);
}
示例(这不是Java,而是JavaScript,但是for循环的工作方式相同; javascript不是java ,请不要误解。我只是希望向您展示一个有关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个元素。并且数组的最高索引总是小于数组的长度(数组的大小)。