Java 随机生成器的数组索引越界
我正在做家庭作业,有个问题我无法解决。所有这些都是我创建的,它编译得很好,直到我尝试在主界面中测试它。这给了我一个错误 这里是我创建的方法,一个用于生成数组和排序,还有一个用于跟踪更改数量的计数器。感谢您的帮助Java 随机生成器的数组索引越界,java,arraylist,random,Java,Arraylist,Random,我正在做家庭作业,有个问题我无法解决。所有这些都是我创建的,它编译得很好,直到我尝试在主界面中测试它。这给了我一个错误 这里是我创建的方法,一个用于生成数组和排序,还有一个用于跟踪更改数量的计数器。感谢您的帮助 import java.util.*; public class Test { public static int selectionSort(int[] data) { int min; int temp; int cou
import java.util.*;
public class Test {
public static int selectionSort(int[] data) {
int min;
int temp;
int counter = 0;
for (int index = 0; index < data.length-1; index++) {
min = index;
/* Find the minimum element from position index */
for (int scan = index + 1; scan < data.length; scan++) {
counter++;
if (data[scan] < (data[min])) min = scan;
}
/* Swap the values */
temp = data[min];
data[min] = data[index];
data[index] = temp;
}
return counter;
}
public static int[] arrayGen(int max) {
int top = 100;
int bottom = 0;
int listInts;
Random random = new Random();
top = 100;
int[] myList = new int[max];
for (int i = 0; i < max; i++) {
myList[i] = random.nextInt(top - bottom);
listInts = random.nextInt();
System.out.println(myList[ listInts]);
}
return myList;
}
public static void main(String[] args) {
selectionSort(arrayGen(5));
}
}
这是关键代码:
listInts = random.nextInt();
System.out.println(myList[ listInts]);
random.nextInt提供一个介于-2147483648和2147483647之间的数字
在几乎所有情况下,这都不是有效的数组位置
将for循环更改为:
for (int i = 0; i < max; i++) {
myList[i] = bottom + random.nextInt(top - bottom);
System.out.println(myList[i]);
}
return myList;
这将返回一个随机数组,其长度为最大整数和介于底部和顶部之间的随机值您认为random.nextInt返回的值的范围是多少;成为?为什么您希望它是myList的有效数组索引?您创建了一个特定大小的列表,然后尝试访问一个随机生成的数字索引处的元素,但不保证它在范围内,您会惊讶地发现它超出了范围?您可能正试图执行System.out.PrintLMyList[i]?此外,您的代码中可能存在逻辑问题。例如,如果top=100;bottom=20,您将返回0到80之间的结果,而不是20到100之间的结果。谢谢,这很有帮助!现在转到下一个问题,为什么我的计数器没有从第一个方法返回。预期的输出是什么?选择排序工作正常!我让它工作了,很简单,我做得不对。谢谢你的帮助!
for (int i = 0; i < max; i++) {
myList[i] = bottom + random.nextInt(top - bottom);
System.out.println(myList[i]);
}
return myList;