热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一个能将给定非负整数数组中的数字排列成最大数字的函数

一个能将给定非负整数数组中的数字排列成最大数字的函数。javaversion"1.8.0_40"编写一个能将给定非负整数数组中的数字排列成最大数字的函数。例如,给定[5

一个能将给定非负整数数组中的数字排列成最大数字的函数。


java version "1.8.0_40"

//编写一个能将给定非负整数数组中的数字排列成最大数字的函数。
//例如,给定[50,2,1,9],最大数字为95021。
public class Sort {

public static void main(String args[]){
int number[] = {1,2,3,32,335,34,7,6,9};
int number1[] = {312,321,3354,222,8};
System.out.println(SortMax(number));
System.out.println(SortMax(number1));
}

public static String SortMax(int num[]){
int number[] = new int[num.length];
for (int i = 0; i number[i] = num[i];
}
int max = 0;
int min = 0;
StringBuffer s = new StringBuffer();
for (int i = 0; i for (int j = i + 1; j Integer x = number[i];
Integer y = number[j];
int tempX = Integer.parseInt(x.toString() + "" + y.toString());
int tempY = Integer.parseInt(y.toString() + "" + x.toString());
//关键点,转为String类型拼接起来,再转回int类型进行比较
if(tempX > tempY){
max = x;
min = y;
}
else{
max = y;
min = x;
}
number[i] = max;
number[j] = min;
}
}
for (int i = 0; i s.append(number[i]);
}
return s.toString();
}
}
/*Output:

*///:输出String类型
程序的关键点在于拼接比较大小。两个for循环嵌套实现排序。x和y是Integer对象。内层for循环开始时就要进行一次赋值。我始终是用number[i]来进行比较。


如果不重新赋值,会造成意想不到的错误。比如下面这个例子,在内层for循环前初始化x。

//错误示范
//未重新初始化对象
public class Sort {
    
    public static void main(String args[]){
        int number[] = {1,2,3,32,335,34,7,6,9};
        int number1[] = {9,8,55,222,8};
        System.out.println(SortMax(number));
        System.out.println(SortMax(number1));
    }
    
    public static String SortMax(int num[]){
        int number[] = new int[num.length];
        for (int i = 0; i             number[i] = num[i];
        }
        int max = 0;
        int min = 0;
        StringBuffer s = new StringBuffer();
        for (int i = 0; i             Integer x = number[i];    //把x放到内层for循环前面
            for (int j = i + 1; j                 Integer y = number[j];
                int tempX = Integer.parseInt(x.toString() + "" + y.toString());
                int tempY = Integer.parseInt(y.toString() + "" + x.toString());
                //关键点,转为String类型拼接起来,再转回int类型进行比较
                if(tempX > tempY){
                    max = x;
                    min = y;
                }
                else{
                    max = y;
                    min = x;
                }
                number[i] = max;
                number[j] = min;
            }
        }
        for (int i = 0; i             s.append(number[i]);
        }
        return s.toString();
    }
}
/*Output:
911111111 这是个错误的结果
98855222 这个结果竟是正确的
*///:输出String类型
在这个错误范例中,内层for循环跑完一次后,Integer对象y被回收,对象x包含的值是1。number[0] == 2 ,number[1] ==1,x的value为1。内层for循环中j = 2,

对象x的值1会与number[2]进行比较。排序后,number[2] == 1,number[0] == 3。以此类推,数组number接下来的值都会变成1。



推荐阅读
author-avatar
pop6959140
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有