class Rank
{
  private static int[] arr;
  private static int  t;
  
public Rank(int[] Arr)
  {
arr = Arr;  
t = arr.length;
  }// 基数排序
public void radixSort() {
//int d = 0;
int n = maxBit(arr);//最大位数
int i = arr.length;
int[][] A = new int[10][i];
int[] m = new int[10];//用于计算二维数组中是否有值
int k = 1; for (int l = 0; l < n; l++) {

int d = 0; for (int a = 0; a < i; a++) {
int x = ((arr[a]/k) % 10);
A[x][m[x]] = arr[a];
m[x]++;
} for (int c = 0; c < 10; c++) { if (m[c] != 0) {
for (int b = 0; b < m[c]; b++) {
arr[d++] = A[c][b];

}
// m[c]++;
} }

k = k*10; }
}
   
   public static int maxBit(int[] a)//求数组中最大位数
   {
   int k = 0;
   int j = 1;
   for(int i = 0;i < a.length-1; i++)
   {
   while(a[i]/j > 0)
   {
  k++;
  j = j*10;
   }
      
   }
   
   return k;
   }
public class TestRank 
{
   public static void main(String args[])
   {
   System.out.println("请输入要输入的数目并按回车键确定");
   Scanner scan = new Scanner(System.in);
   int b = scan.nextInt();
   int[] a = new int[b];
   for(int i = 0;i < b;i++)
   {
 // System.out.println("请输入第"+(i+1)+"个数并按回车键确定");
  a[i] = scan.nextInt();
   }
   
   Rank R = new Rank(a);       R.radixSort();
   
    //System.out.print(R.maxBit(a));
  
   for(int c = 0;c < a.length;c++)
   {
      System.out.print(a[c]+" ");
   }
    }
}运行testrank总是说超界A[x][m[x]] = arr[a];arr[d++] = A[c][b];主要是这两句一直没能明白!
   

解决方案 »

  1.   


    import java.util.Scanner;class Rank
    {
    private static int[] arr;
    private static int t; public Rank(int[] Arr)
    {
    arr = Arr;   
    t = arr.length;
    }// 基数排序
    public void radixSort() {
    // int d = 0;
    int n = maxBit(arr);//最大位数
    int i = arr.length;
    int[][] A = new int[10][i];
    int[] m = new int[10];//用于计算二维数组中是否有值
    int k = 1; for (int l = 0; l < n; l++) { int d = 0; for (int a = 0; a < i; a++) {
    int x = ((arr[a]/k) % 10);
    A[x][m[x]] = arr[a];
    m[x]++;
    } for (int c = 0; c < 10; c++) { if (m[c] != 0) {
    for (int b = 0; b < m[c]; b++) {
    arr[d++] = A[c][b]; }
    // m[c]++;
    } } k = k*10; }
    } public static int maxBit(int[] a)//求数组中最大位数
    {
    int k = 0;
    int j = 1;
    for(int i = 0;i < a.length-1; i++)
    {
    while(a[i]/j > 0)
    {
    k++;
    j = j*10;
    } } return k;
    }}
    public class TestRank  
    {
    public static void main(String args[])
    {
    System.out.println("请输入要输入的数目并按回车键确定");
    Scanner scan = new Scanner(System.in);
    int b = scan.nextInt();
    int[] a = new int[b];
    for(int i = 0;i < b;i++)
    {
    // System.out.println("请输入第"+(i+1)+"个数并按回车键确定");
    a[i] = scan.nextInt();
    } Rank  R = new Rank (a); R.radixSort();// System.out.print(R.maxBit(a)); for(int c = 0;c < a.length;c++)
    {
    System.out.print(a[c]+" ");
    }
    }
    }我运行 怎么没有问题啊
      

  2.   

    请输入要输入的数目并按回车键确定
    3
    12
    3
    11
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
    at Rank.radixSort(Rank.java:148)
    at TestRank.main(TestRank.java:21)
      

  3.   

    本帖最后由 AWUSOFT 于 2011-12-02 16:24:25 编辑