java编程遇到问题,请求解答


package TestFunctions;
import java.util.Arrays;
public class RadixSort {
    static int M=10;
    public static void main(String[] args)
    {
        int[] member= {12,2,34,204,500,6,37,89,159,10};
        radixSort(member);
        for(int i=0;i<=9;i++)
            System.out.println(member[i]);
    }    
    public static void radixSort(int[] member)
    {
        int dig,k=0,l=0,m=0,i,j;
        int [][] array =new int [10] [10];
        int [] substitute =new int [10];
        Arrays.fill(substitute,0);
        Arrays.fill(array,substitute);
        for(i=1;i<=M;i++)
        {
            for(j=0;j<=9;j++)
            {
                dig=digit(member[j],i);
                for(k=0;array[dig][k]!=0;k++)
                    array[dig][k]=member[j];
            }
            
            l=0;
            
            for(m=0;m<=9;m++)
            {
                for(k=0;array[m][k]!=0;k++)
                    member[l++]=array[m][k];                
            }
            Arrays.fill(array, 0);
        }
    }    
    public static int digit(int mem,int i)
    {
        while(i>1) {
            mem/=10;
            i--;
        }
        return mem%10;
    }
}

基数排序不知道哪里有问题,请求更正

写注释的地方就是问题点,Arrays.fill(Object[], Object)可以去看一下源码,你赋值数组的操作很危险Arrays.fill(array,substitute);


public class RadixSort {
    static int M=10;
    public static void main(String[] args)
    {
        int[] member= {12,2,34,204,500,6,37,89,159,10};
        radixSort(member);
        System.out.println(Arrays.toString(member)); // 输出可以使用Arrays.toString()
    }
    public static void radixSort(int[] member)
    {
        int dig,i,j; // k、l、m不需要赋值
        int [][] array =new int [10] [10]; // int数组默认缺省值就是0,不需要赋值操作

        for(i=1;i<=M;i++)
        {
            for(j=0;j<M;j++) // 定义了常量M没使用
            {
                dig=digit(member[j],i);
                for(int k=0;;) { // 数值添加条件和for循环跳出条件混淆
                    if (array[dig][k] != 0) {
                        k++;
                    } else {
                        array[dig][k] = member[j];
                        break;
                    }
                }
            }

            int l=0;

            for(int m=0;m<M;m++) // 定义了常量M没使用
            {
                for(int k=0;k<M;k++) // 数值添加条件和for循环跳出条件混淆 + 定义了常量M没使用
                    if (array[m][k]!=0) {
                        member[l++] = array[m][k];
                    }
            }
            array = new int [10] [10]; // 运行报错,这里就想赋值0
        }
    }
    public static int digit(int mem,int i)
    {
        while(i>1) {
            mem/=10;
            i--;
        }
        return mem%10;
    }
}