我正在编写一个程序,用于输入随机数和迭代次数的用户输入。我试图对此进行冒泡排序(对于我的课程,我需要使用气泡和选择排序)。我的初始代码做得很好,直到我努力添加部分进行迭代然后选择排序。现在,当我运行我的代码时,它将停止并在我的帖子标题中指出错误。它停在的行是 randomArray [d]> randomArray [d + 1] (下面代码中的最后一行)。
根据我在尝试解决此问题时所研究的内容,它表示当数组被非法索引访问时,或者索引为负数或大于数组大小时,通常会抛出错误。我尝试了一些不同的东西来解决这个问题,但此刻我还在墙上。如果有人能提供一些方向,我将非常感激!
由于
Scanner input = new Scanner (System.in);
System.out.println("Enter a number please: ");
int n = input.nextInt();
//Get user input for number if iterations
System.out.println("Enter a number of iterations please: ");
int numIfor = input.nextInt();
//create array of random numbers
int[] randomArray = new int[n];
Random bubbleRandom = new Random();
//fill in the array of random numbers
for(int i=0; i < n; i++) {
randomArray[i] = bubbleRandom.nextInt(100);
}
//Printing the array before the sort
System.out.println("The numbers before the Bubble Sort: ");
for(int i=0; i < n; i++) {
System.out.print(randomArray[i] + " ");
}
System.out.println();
//Printing the array out after the Bubble Sort
int bubble = 0;
int sort = 0;
long startTime = System.currentTimeMillis();
for (int c=0; c < (numIfor - 1); c++)
{
for (int d=0; d < numIfor - c -1; d++)
{
if (randomArray[d]>randomArray[d+1])
{
bubble = randomArray[d];
randomArray[d] = randomArray[d+1];
randomArray[d+1] = bubble;
sort++;
}
}
}
long endTime = System.currentTimeMillis();
long runningTime = endTime-startTime;
System.out.println("The total number of iterations is: " + numIfor);
System.out.println("The total count of numbers sorted is: " + sort);
System.out.println("The total time elapsed was: " + runningTime);
System.out.println("The numbers after the Bubble Sort: ");
for(int i=0; i < n; i++){
System.out.print(randomArray[i] + " ");
}
}
}
答案 0 :(得分:0)
可能发生的是d+1
变得比数组的最后位置更大。您可以通过更改最后一个for循环来确保它只到达数组的末尾:
这里的问题是你循环到numIfor,这是一个与数组长度完全无关的值(n)。这意味着如果用户输入numIfor和n,那么numIfor&gt; n,那么你的代码必然会抛出异常。
对此的解决方案是使用数组的实际长度作为限制器值,因此:
for (int c=0; c < randomArray.length-1; c++)
{
for (int d=0; d < randomArray.length-c-1; d++)
{
if (randomArray[d]>randomArray[d+1])
这假设您希望d遍历数组的所有值。但真正的要点是你应该总是尝试循环到小于数组的长度(-1是因为你正在检查数组[d + 1])。如果您尝试访问数组中的所有值,则此方法效果最佳,因为它可以保证您不会超出范围。