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

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

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。

一起吃早餐,午餐,晚餐。或许吃得不好,

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

相关文章:

你感兴趣的文章:

标签云: