java数组越界问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 00:37:41
package com.sun;

import java.util.ArrayList;

public class Number extends Monkey{
public static void main(String[] args) {
Number n = new Number();
n.count();
}
}
class Monkey{
private int id ;
private int num ;
private int i ;
public void count()
{
ArrayList al = new ArrayList();
for (int i = 0; i < 3; i++) {
Monkey mon = new Monkey();
mon.id = i;
mon.num = 1;
al.add(mon);
}
while (al.size() != 1) {
i++;
num++;
if (((Monkey)al.get(i)).num % 3 == 0) {
al.remove(i);
}
if (i > al.size()) {
i = 0;
}
}
System.out.println(((Monkey)al.get(0)).num);
}
}

同志,你这题有很大的问题。
先不说逻辑问题。 说你数组的越界问题。
第一:
最后面的 if (i > al.size()) { i = 0; }
要放在 if (((Monkey)al.get(i)).num % 3 == 0) { al.remove(i); }
前面。
你想象看。如果反过来,先i++,那i超过了size,怎么处理,没有处理就运行al.get(i)是不是越界了。

第二,反过来还不行。
你写的是 if (i > al.size()), 你要知道数组是从0开始数的,如果size等于3,其实只有0,1,2。 当i=al.size()时 al.get(i)行不行?是不是也过界了。
所以要 i>=al.size().

最后,即使你这样子改了,还是没有结果的,会不断运算。
你拿张纸写一下,你al里的3个类num是多少,都是1,al.get(i),随便哪个,num%3都是1%3,能等于0么? 不等于0,就不能remove,始终循环。

的确 逻辑比较混乱。刚才我看了一眼,很扎眼,就直接看一楼的去了。