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