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];主要是这两句一直没能明白!
{
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];主要是这两句一直没能明白!
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]+" ");
}
}
}我运行 怎么没有问题啊
3
12
3
11
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at Rank.radixSort(Rank.java:148)
at TestRank.main(TestRank.java:21)