您的位置:首页 > 其它

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

2015-05-14 22:27 267 查看
一个能将给定非负整数数组中的数字排列成最大数字的函数。

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 < num.length; i++) {
number[i] = num[i];
}
int max = 0;
int min = 0;
StringBuffer s = new StringBuffer();
for (int i = 0; i < number.length; i++) {
for (int j = i + 1; j < number.length; 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 < number.length; 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 < num.length; i++) {
            number[i] = num[i];
        }
        int max = 0;
        int min = 0;
        StringBuffer s = new StringBuffer();
        for (int i = 0; i < number.length; i++) {
            Integer x = number[i];    //把x放到内层for循环前面
            for (int j = i + 1; j < number.length; 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 < number.length; 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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐