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

我正在创建一个数组程序。 我正在练习如何将for循环转换for while循环,但我无法理解这个概念。

如果我有for循环:

 int [] list = new int [5]; for (int i = 0; i < 5; i++) { list [i] = i + 2; } 

我怎么能让它成为一个循环?

这是我的尝试

 int [] list = new int [5]; int i = 0; while (i<5) { list [i] = i + 2; i++; } System.out.print(list[i] + " "); 

这是我认为应该做的,但它在我的计算机中出现错误。

线程“main”中的exceptionjava.lang.ArrayIndexOutOfBoundsException:5在Arrays2.main(Arrays2.java:21)

这是第21行

 System.out.print(list[i] + " "); 

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

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

运行ForUpdate后,将再次评估Expression 。 如果仍然是,则再次执行Statement ,然后执行ForUpdate ; 重复此操作直到Expression为false。

您可以将此重构为while循环,如下所示:

 ForInit; while (Expression) { Statement; ForUpdate; } 

为了将此模式应用于“真实”for循环,只需替换上面描述的块。

对于上面的例子:

  • ForInit => int i = 0
  • Expression => i < 5
  • ForUpdate => i++
  • Statement => list [i] = i + 2;

把它放在一起:

 int i = 0; while (i < 5) { list[i] = i + 2; i++; } 
 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) { } 

你的while循环很好,但在它结束后, i的值是5 。 由于java数组始终从零开始索引,因此list[5]不存在并且访问它会引发exception。

这就是你在打印System.out.print(list[i] + " ");时看到的内容System.out.print(list[i] + " "); 只需打印任何其他元素,例如list[1]list[4]list[0]