LateNoon 2022-02-27 19:57 采纳率: 63.6%
浏览 24
已结题

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

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

  • 写回答

1条回答 默认 最新

  • 「已注销」 2022-02-27 23:49
    关注

    写注释的地方就是问题点,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;
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月8日
  • 已采纳回答 2月28日
  • 创建了问题 2月27日

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置