我一直在索引越界错误,我不知道为什么。我觉得它不应该超出范围,因为对的数量比开始的列表元素的数量少一个。
这是我的代码:
`
package main;
import java.util.Random;
import java.io.File;
import java.io.IOException;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
public class BubbleSort
{
static int Bubble_Sort_return_int (int[] list, int n)
{
int comparison_count = 0;
int number_pairs = n -1;
boolean swapped_elements = true;
while (swapped_elements == true)
{
for (int i = 1; i < number_pairs ; i++)
{
swapped_elements = false;
comparison_count++;
if (list[i] > list[i-1])
{
int swap_element = list[i -1];
list[i-1] = list[i];
list[i] = swap_element;
swapped_elements = true;
}
}
number_pairs = number_pairs - 1;
}
return comparison_count;
}
public static void main (String args[])throws IOException, WriteException
{
Random one_to_ten = new Random();
int list [][] = new int[1000][1000];
int[] comparison_count_list_after_one_pass = new int[1000];
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < i+1; j++)
{
list[i][j] = one_to_ten.nextInt(10);
}
}
for (int i = 0; i < 1000; i++)
{
comparison_count_list_after_one_pass[i] = Bubble_Sort_return_int(list[i], i + 1);
}
}
}
答案 0 :(得分:1)
你的逻辑在Bubble_Sort_return_int
中存在缺陷。第一次调用时,n
等于1
,number_pairs
等于0
。 for循环(i < number_pairs
)中的比较失败,number_pairs
递减到-1
。这将一直持续到number_pairs
从-2147483648
递减到2147483647
。只有这样for循环才能执行任何操作。在i
等于1000
的循环中,list[i]
导致ArrayIndexOutOfBoundsException异常。