如何将此for循环转换为while循环?

时间:2016-03-15 22:16:50

标签: java arrays for-loop while-loop

我正在创建一个数组程序。我正在练习如何将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] + " ");

3 个答案:

答案 0 :(得分:8)

基本for语句的一般结构是:

for ( ForInit ; Expression ; ForUpdate ) Statement
  • ForInit是初始化程序。它首先运行以设置变量等。
  • Expression是检查是否应运行Statement的布尔条件
  • StatementExpression为真时要运行的代码块
  • ForUpdateStatement之后运行,例如必要时更新变量

运行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]