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 maccms影视模板 制作影视网站失败 求
  • ¥15 stm32按键设置闹钟数进退位不正常
  • ¥15 三电平逆变器中点电位平衡问题
  • ¥20 这怎么写啊 java课设
  • ¥15 用C语言完成一个复杂的游戏
  • ¥15 如何批量更改很多个文件夹里的文件名中包含文件夹名?
  • ¥50 MTK手机模拟HID鼠标出现卡顿
  • ¥20 求下下面这个数据结构代码
  • ¥20 前端 二进制文件流图片转化异常
  • ¥15 github上的这个C语言项目如何跑起来