Java 越界错误

Posted

技术标签:

【中文标题】Java 越界错误【英文标题】:Java out-of-bounds error 【发布时间】:2016-04-12 03:10:58 【问题描述】:

我不断收到越界错误。我想检查重复项。在此之后还有更多内容,但现在最重要的是它说我得到了一个 OutOfBoundsExceptionArrayList, index:1 size:1

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++;

        

    

【问题讨论】:

很清楚。 它说数组列表是 index:1 size: 1 n 永远不会增加,顶部 for 循环永远不会完成 它只是稍后在代码中执行。而k从1开始,我忘记改了。 我已经格式化了你的代码,因为它很难阅读。如果您不使用 IDE,我建议您开始使用 IDE,因为它对初学者有很大帮助。我会建议Netbeans。有一个格式化代码的快捷方式 - Alt Shift F。为什么你的for 循环没有第三部分(通常是i++ 的东西) 如果您不想添加重复项,您只需检查 arraylist 以查看该值是否是其中的一部分。 lottery.contains(x); 【参考方案1】:

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

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

数字永远不会等于零 所以

if (found == false) 
    lottery.add(number);
    count[number]++;
    i++;

将永远被执行 并且在每个循环中向彩票添加新元素总是会发生两次 并且没有n++ 所以基本上你的大 for 循环永远不会结束 并通过此代码

first = (int) (Math.random() * 42 + 1);

你确定计数长度正好是 42,因为如果小于它会导致IndexOutOfBoundsException 如果超过42,您没有检查其中的所有元素:) 希望对您有所帮助

【讨论】:

【参考方案2】:

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

【讨论】:

也许你应该仔细看看,因为i++k++都有。

以上是关于Java 越界错误的主要内容,如果未能解决你的问题,请参考以下文章

java中的字符串索引越界错误(charAt)

java字符串索引越界

VS调试数组越界问题

ArrayList 中的索引越界异常

数组访问越界

数组访问越界