给出一个无限循环

时间:2013-10-11 08:55:31

标签: java loops

我在Java中使用List,我正在遍历集合以使用创建的整数值列表。为什么会导致无限循环?

int i = 0;
int j = 0;

List<Integer> li = new ArrayList<Integer>();

for (i = 0; i < 10; i++) {
    li.add(i);
}

do {
    System.out.println(li.get(j));
} while(j < li.size());

16 个答案:

答案 0 :(得分:40)

您忘记/错过了在do...while循环中递增计数器变量。

j++是否会响铃?

答案 1 :(得分:17)

原因j始终小于li.size()

答案 2 :(得分:11)

这是无限的,因为您每次从j读取第一个值时都不会更改li的值。 List<>集合在您阅读时不会删除项目。如果您需要这种行为,则应该查找StackQueue个集合。

do {
System.out.println(li.get(j));
j++; // you are missing this line
} while(j < li.size());

答案 3 :(得分:6)

您忘记增加循环计数器变量(j

答案 4 :(得分:6)

您忘记在j++ - j循环的do条款中增加(dowhile

答案 5 :(得分:5)

这是因为你没有对“j”的值执行任何递增或递减操作。 因此,每次编译器将j的值设置为0并且循环运行无限循环,因为它找到do..while循环的条件为true。

答案 6 :(得分:5)

while(j < li.size());行检查j的值是否小于List

的大小

因为j =00<10 (Which is your List size)总是为真,所以代码永远不会终止,你进入无限循环。你可能会做这样的事情

do {
  System.out.println(li.get(j));
  j++;
} while(j < li.size());

答案 7 :(得分:4)

如果你不增加j 条件

while(j < li.size());

将永远是相同的

所以在第二个循环中保持j ++

do {
System.out.println(li.get(j));
j++;
} while(j < li.size());

答案 8 :(得分:4)

您应该增加计数器变量j。目前j始终小于li.size()

答案 9 :(得分:4)

下面添加j++
System.out.println(li.get(j));

答案 10 :(得分:4)

您需要增加int j。您可以使用j++来实现此目的。您需要在代码行do..while之后的System.out.println(li.get(j));循环中执行此操作。

否则j将始终小于您的arraylist li的大小,随后循环将无限运行

答案 11 :(得分:4)

如果要与最大值进行比较,请始终在任何类型的循环中递增变量。要检查j小于某个值,在某个时间点,您需要在do....while()循环中执行其增量。 所以使用

j++;
在循环中

,然后你的循环才会运行,直到j的值变得大于你要检查它的最大值。

答案 12 :(得分:3)

您错过了更新循环中的计数器/迭代器j。由于j未更新,因此循环无限期地执行。

您将最终获得li.get()方法调用返回的相同值,因为传递的参数始终是相同的值。

您应该更新循环体中j的值:

do {
    System.out.println(li.get(j));
    ++j; //Add this change
} while(j < li.size());

do {
    System.out.println(li.get(j));
} while(++j < li.size()); //Add this change

答案 13 :(得分:3)

第一个for循环很好但是在下一个do_while循环中,你没有增加或更新循环索引(j),这就是第二个循环无限运行的原因。

int i = 0;
int j = 0;

List<Integer> li = new ArrayList<Integer>();

for (i = 0; i < 10; i++) {
    li.add(i);
}

do {
    System.out.println(li.get(j));
    j++; //increament loop index or you may use j+=1;
} while(j < li.size());

答案 14 :(得分:2)

你设置j = 0但它永远不会增加所以它总是j < li.size()。

答案 15 :(得分:1)

j始终为0. j初始化为值0且从未更新