How do I convert this for loop into a while loop? [closed]

点点圈 提交于 2019-12-06 13:40:16

问题


I am creating an array program. I am practicing how to convert for loops to while loops, but I cannot grasp the concept.

If I have the for loop:

int [] list = new int [5];

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

How would I make it a while loop?

Here's my attempt

int [] list = new int [5];
int i = 0;

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

This is what I think should be done, but it comes up as an error in my computer.

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 at Arrays2.main(Arrays2.java:21)

This is line 21

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

回答1:


The general structure of a basic for statement is:

for ( ForInit ; Expression ; ForUpdate ) Statement
  • ForInit is the initializer. It is run first to set up variables etc.
  • Expression is a boolean condition to check to see if Statement should be run
  • Statement is the block of code to be run if Expression is true
  • ForUpdate is run after the Statement to e.g. update variables as necessary

After ForUpdate has been run, Expression is evaluated again. If it is still true, Statement is executed again, then ForUpdate; repeat this until Expression is false.

You can restructure this as a while loop as follows:

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

In order to apply this pattern to a "real" for loop, just substitute your blocks as described above.

For your example above:

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

Putting it together:

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



回答2:


int [] list = new int [5];

int i = 0; // initialization
while (i < 5) { // condition
    list [i] = i + 2;
    i++; // afterthought
}

The for loop posted is pretty much a shorthand for the above. The first part of a for loop is called the initialization, equivalent to the int i = 0; in the above code. The next is called the condition, which, if true, will cause the loop to be run again; this is the i < 5 part. Finally there is the afterthought, which changes the iterator i (usually an increment of one for iterating over an array). The for loop simply condenses these three parts into one line, as such:

for (initialization; condition; afterthought) {
}



回答3:


Your while loop is perfetly fine, but after it ends, the value of i is 5. Since java arrays are always indexed from zero, list[5] doesn't exist and accessing it throws exception.

That's what you see when printing System.out.print(list[i] + " "); Just print any other element, list[1], list[4] or list[0] for example.



来源:https://stackoverflow.com/questions/36023297/how-do-i-convert-this-for-loop-into-a-while-loop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!