数组索引超出随机生成器的范围

时间:2017-03-23 20:21:39

标签: java arraylist random

我正在做我的家庭作业并且有一个我无法解决的问题。所有这一切我创建并编译好,直到我试图在主要测试它。它给了我错误 “

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1712741702
    at Test.arrayGen(Test.java:45)
    at Test.main(Test.java:53)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
".  

以下是我创建的方法,一个用于生成数组和排序,以及一个用于跟踪更改数量的计数器。任何帮助表示赞赏。

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

    }

}

1 个答案:

答案 0 :(得分:0)

这是关键代码:

listInts = random.nextInt();
System.out.println(myList[ listInts]);

random.nextInt()为您提供-21474836482147483647

之间的数字

在几乎所有情况下,这都不是有效的阵列位置。

将您的for循环更改为:

for (int i = 0; i < max; i++) {
       myList[i] =  bottom + random.nextInt(top - bottom);
       System.out.println(myList[i]);
}
return myList;

这将返回一个随机数组,其长度为max整数和bottomtop之间的随机值