我收到错误:“ArrayIndexOutOfBounds Exception3”我不认为这是唯一的错误,但到目前为止,我已经能够弄清楚了。
import java.util.Random;
/*class containing random search algorithm*/
public class RandomSearch {
public static int randomSearch(int queryValue, int[] list) {
/*conducts a random search as specified by user*/
/*trys 10,000,000 random combinations searching
for user value*/
int length = list.length;
for(int i=0; i < 10000000; i++) {
/*generates a random number from 0 to length*/
int randomNum = (int)Math.floor(Math.random()*(length+1));
StdOut.print(randomNum);
if((int)queryValue == (int)list[randomNum]) {
return randomNum;
}
}
/*returns -2 if user value not found*/
return -2;
}
}
答案 0 :(得分:2)
你需要这样的东西来生成索引,这使索引在0和长度之间 您生成的索引超出了数组的大小,这就是为什么您将索引超出绑定异常的原因。
/*Edit - Changed val to length to match the question.*/
public int randInt(int length) {
// Usually this can be a field rather than a method variable
Random rand = new Random();
int randomNum = rand.nextInt(length);
return randomNum;
}
答案 1 :(得分:0)
问题是,randomNum
可以获得更大的值,而不是可用于访问数组list
的最大索引。
要解决此问题,请更改
int randomNum = (int) (Math.random() * (length + 1));
到
int randomNum = (int) (Math.random() * (length));
答案 2 :(得分:0)
假设您的list.length
长度为100,如果Math.random()
返回0.999
,则此声明
(int)Math.floor(Math.random()*(length+1));
将返回100
。虽然100
超出了列表范围,但由于长度为100
的数组的有效索引是从0
到99
。
答案已更新
答案 3 :(得分:0)
数组索引从0开始,所以当你在数组上调用length()时,最后一个索引实际上是长度 - 1.如果你在list [length - 1]之后尝试任何索引,你将获得Array out of bounds error 。
答案 4 :(得分:0)
尝试使用java.util.Random方法:
Random rand = new Random();
int randomNum = rand.nextInt(lenght+1);
它给出从1到长度的数字。
答案 5 :(得分:0)
标准方法是:
int randomNum = (int)(Math.random()*length);
您不需要Math.floor()
,因为投放到int
具有相同的效果。
也只需乘以length
(不是length+1
,即可获得从0到长度为1的数字。
或者只是使用JDK的API:
int randomNum = new Random().nextInt(length);