如何将此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
-
Statement
是Expression
为true时要运行的代码块 -
ForUpdate
在Statement
之后运行,例如根据需要更新变量
运行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]
。