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

简介: 一个能将给定非负整数数组中的数字排列成最大数字的函数。 java version "1.8.0_40" // 编写一个能将给定非负整数数组中的数字排列成最大数字的函数。// 例如,给定[50,2,1,9],最大数字为95021。

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


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。


目录
相关文章
|
6月前
数一下 1到 100 的所有整数中出现多少个数字9并输出这些数字
数一下 1到 100 的所有整数中出现多少个数字9并输出这些数字
72 0
|
6月前
28.求任意一个整数的十位上的数字
28.求任意一个整数的十位上的数字
78 3
|
6月前
25.输入任意的正整数,将其各位分离出来;求它是几位数,求各位上数字的和,求其逆值
25.输入任意的正整数,将其各位分离出来;求它是几位数,求各位上数字的和,求其逆值
48 0
|
6月前
|
索引
Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
|
C语言
已知一个整数,如何判断这个整数是无符号的?
已知一个整数,如何判断这个整数是无符号的?
88 0
输出整数各位数字
输出整数各位数字
77 0
7-10 求数字个数
7-10 求数字个数
87 0
|
JavaScript 前端开发
数字和字符串相加
数字和字符串相加
127 0
|
开发框架 .NET C#
C# 找出数组中只出现了一次的数字
.NET 生态越来越好,初学的朋友也越来越多。处理同一件简单的问题,随着我们知识的积累解决问题的方法也会越来越多。 开始学习一门新的语言,我们经常会去解决之前用别的语言解决过无数次的老问题,今天我们来看看这么一道简单的查重题。
126 0