Java越界错误

Java越界错误,java,error-handling,runtime-error,Java,Error Handling,Runtime Error,我总是犯越界错误。我想检查一下有没有重复的。在这之后还有更多的内容,但就目前所有重要的内容而言,它表明我通过ArrayList,索引:1大小:1,获得了一个OutOfBoundsException ArrayList lottery = new ArrayList(); for (int n = 0; n < 4;) { int number = 0; int first = 0; int value = 0; boolean found = false;

我总是犯越界错误。我想检查一下有没有重复的。在这之后还有更多的内容,但就目前所有重要的内容而言,它表明我通过
ArrayList
,索引:1大小:1,获得了一个
OutOfBoundsException

ArrayList lottery = new ArrayList();

for (int n = 0; n < 4;) {
    int number = 0;
    int first = 0;
    int value = 0;
    boolean found = false;
    first = (int) (Math.random() * 42 + 1);
    lottery.add(first);
    count[first]++;

    for (int i = 1; i < 6;) {
        number = (int) (Math.random() * 42 + 1);

        for (int k = 0; k < 6;) {
            // here value = lottery.get(k);
            if (value == number) {
                found = true;

            } else {
                found = false;
            }

            if (found == true) {
                number = (int) (Math.random() * 42 + 1);

            } else {
                k++;

            }

        }
        System.out.println("number " + (i + 1) + ": " + number);
        if (found == false) {
            lottery.add(number);
            count[number]++;
            i++;

        }

    }
}
ArrayList彩票=新建ArrayList();
对于(int n=0;n<4;){
整数=0;
int first=0;
int值=0;
布尔值=false;
first=(int)(Math.random()*42+1);
彩票。添加(第一);
计数[第一]+;
对于(int i=1;i<6;){
number=(int)(Math.random()*42+1);
对于(int k=0;k<6;){
//这里的值=彩票。获取(k);
如果(值==数字){
发现=真;
}否则{
发现=错误;
}
if(find==true){
number=(int)(Math.random()*42+1);
}否则{
k++;
}
}
System.out.println(“编号”+(i+1)+“:”+编号);
if(found==false){
彩票。添加(号码);
计数[数]+;
i++;
}
}
}

我假设
count
是要检查的数组 我注意到两个错误 值参数从未更改,因此它将始终保持
=0
在这个代码中

 number = (int) (Math.random() * 42 + 1);
 if (value == number) {
      found = true;
数字永远不会等于零 所以

将永远被执行 在每个循环中,向彩票添加新元素总是会发生两次 没有
n++
所以基本上你的大循环永远不会结束 根据这个准则

first = (int) (Math.random() * 42 + 1);
您确定计数长度正好是42,因为如果小于42,将导致
IndexOutOfBoundsException
如果超过
42
您没有检查其中的所有元素:)
希望这有助于

在我看来,你没有办法结束你的循环。您没有任何允许循环增量增加的东西,例如i++。也许这可以解决你所面临的问题。

这很清楚。它说数组列表的索引:1 size:1n永远不会增加,在代码中,带有never finishIt的top for循环只会在后面执行。k从1开始,我忘了更改它。我已经格式化了你的代码,因为它很难阅读。如果您没有使用IDE,我建议您开始使用IDE,因为它对初学者有很大帮助。我建议使用Netbeans。有一个设置代码格式的快捷方式-Alt Shift F。为什么
for
循环没有第三部分(通常是
i++
内容)。如果不想添加重复项,只需检查arraylist以查看该值是否是它的一部分<代码>彩票。包含(x)也许你应该仔细看看,因为有
i++
k++
first = (int) (Math.random() * 42 + 1);