【问题标题】:Java out-of-bounds errorJava 越界错误
【发布时间】: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);

标签: java error-handling runtime-error


【解决方案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++都有。
    猜你喜欢
    • 2013-10-13
    • 2013-04-02
    • 1970-01-01
    • 2014-06-03
    • 2017-09-23
    • 1970-01-01
    • 2022-01-13
    • 2014-06-06
    • 2012-02-26
    相关资源
    最近更新 更多