我正在创建一个数组程序。我正在练习如何将for
循环转换为while
循环,但我无法理解这个概念。
如果我有for
循环:
int [] list = new int [5];
for (int i = 0; i < 5; i++) {
list [i] = i + 2;
}
如何将其设为while
循环?
这是我的尝试
int [] list = new int [5];
int i = 0;
while (i<5) {
list [i] = i + 2;
i++;
}
System.out.print(list[i] + " ");
这是我认为应该做的,但它在我的电脑中出现错误。
线程中的异常&#34; main&#34; java.lang.ArrayIndexOutOfBoundsException:5在Arrays2.main(Arrays2.java:21)
这是第21行
System.out.print(list[i] + " ");
答案 0 :(得分:8)
基本for语句的一般结构是:
for ( ForInit ; Expression ; ForUpdate ) Statement
ForInit
是初始化程序。它首先运行以设置变量等。Expression
是检查是否应运行Statement
的布尔条件Statement
是Expression
为真时要运行的代码块ForUpdate
在Statement
之后运行,例如必要时更新变量运行ForUpdate
后,再次评估Expression
。如果仍然为真,则再次执行Statement
,然后ForUpdate
;重复此操作,直到Expression
为假。
您可以将其重构为while循环,如下所示:
ForInit;
while (Expression) {
Statement;
ForUpdate;
}
为了将此模式应用于“真实”for循环,只需替换上面描述的块。
上面的示例:
ForInit
=&gt; int i = 0
Expression
=&gt; i < 5
ForUpdate
=&gt; i++
Statement
=&gt; list [i] = i + 2;
把它放在一起:
int i = 0;
while (i < 5) {
list[i] = i + 2;
i++;
}
答案 1 :(得分:2)
int [] list = new int [5];
int i = 0; // initialization
while (i < 5) { // condition
list [i] = i + 2;
i++; // afterthought
}
发布的for循环几乎是上述的简写。 for循环的第一部分称为初始化,相当于上面代码中的int i = 0;
。下一个称为条件,如果为真,将导致循环再次运行;这是i < 5
部分。最后是事后的想法,它改变了迭代器i
(通常是迭代数组的一个增量)。 for循环简单地将这三个部分压缩成一行,如下:
for (initialization; condition; afterthought) {
}
答案 2 :(得分:1)
您的while
循环很好,但在结束后,i
的值为5
。由于java数组始终从零开始索引,因此list[5]
不存在,并且访问它会引发异常。
这就是您在打印时看到的内容System.out.print(list[i] + " ");
只需打印任何其他元素,例如list[1]
,list[4]
或list[0]
。