Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 随机生成器的数组索引越界_Java_Arraylist_Random - Fatal编程技术网

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;