我在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());
答案 0 :(得分:40)
您忘记/错过了在do...while
循环中递增计数器变量。
j++
是否会响铃?
答案 1 :(得分:17)
原因j
始终小于li.size()
答案 2 :(得分:11)
这是无限的,因为您每次从j
读取第一个值时都不会更改li
的值。 List<>
集合在您阅读时不会删除项目。如果您需要这种行为,则应该查找Stack
或Queue
个集合。
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
条款中增加(do
)while
。
答案 5 :(得分:5)
这是因为你没有对“j”的值执行任何递增或递减操作。 因此,每次编译器将j的值设置为0并且循环运行无限循环,因为它找到do..while循环的条件为true。
答案 6 :(得分:5)
第while(j < li.size());
行检查j
的值是否小于List
因为j =0
和0<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且从未更新