Java 越界错误
Posted
技术标签:
【中文标题】Java 越界错误【英文标题】:Java out-of-bounds error 【发布时间】:2016-04-12 03:10:58 【问题描述】:我不断收到越界错误。我想检查重复项。在此之后还有更多内容,但现在最重要的是它说我得到了一个 OutOfBoundsException
和 ArrayList
, 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 越界错误的主要内容,如果未能解决你的问题,请参考以下文章