数组超出Bounds Bubble Sort

时间:2015-04-06 20:44:00

标签: java arrays bubble-sort

我一直在索引越界错误,我不知道为什么。我觉得它不应该超出范围,因为对的数量比开始的列表元素的数量少一个。

这是我的代码:

`

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

1 个答案:

答案 0 :(得分:1)

你的逻辑在Bubble_Sort_return_int中存在缺陷。第一次调用时,n等于1number_pairs等于0。 for循环(i < number_pairs)中的比较失败,number_pairs递减到-1。这将一直持续到number_pairs-2147483648递减到2147483647。只有这样for循环才能执行任何操作。在i等于1000的循环中,list[i]导致ArrayIndexOutOfBoundsException异常。