一晚上都在努力搞懂这个知识点,确实对于我这个刚开始学习的小java菜鸟来说,
这样潦草的总结就算是比较开心的了..
这思考期间,我有这几个疑问。
其一:
怎么样利用Array中的sort将基本数据类型进行逆序排序,也就是从大到小排序。
开始一直以为自己刚学,还不知道更好的办法,就一直在网上找哇找,其间发现了许多方法,
很繁杂,很乱,但其实都不是针对我的问题的回答,为此还在百度上提问了,
到现在也没有人回答我这个问题,也不知道有没有更好的解决办法。
但是有一个能够解决的办法,那就是当你按小到大排序完成之后,在用一个for循环将所有的顺序颠倒一下就可以了,
贴出代码:
package com;
import java.util.Arrays;
import java.util.Scanner;
//升序,ascending order
//降序,descending order
public class DemoSort {
public static void print(int[] a) {
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
if(i == a.length - 1) {
System.out.println();
}
else {
System.out.print(" ");
}
}
}
public static int[] reverseArrays(int[] a) {
for (int i = 0; i < a.length / 2; i++) {
a[i] = a[a.length - 1 - i];
}
return a;
}
public static void main(String[] args) {
int n;
int[] a;
Scanner input = new Scanner(System.in);
while (input.hasNext()) {
n = input.nextInt();
a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = input.nextInt();
}
print(a);
// Arrays.sort(a, new DemoComparator());//用comparator的话就得用包装类Integer了,一会实现
Arrays.sort(a);//我实在不想说什么了,看了半天也不知道怎么解决,所以只能先从小到大排序,然后在for逆转数组吧
a = reverseArrays(a);
print(a);
System.out.println();
}
}
}
然后是用的Integer和comparator实现.其实这个方法还是不错的,最起码对以后的对象排序可以实现了,中途出现了一些差错,导致了一些错误,诶诶,
先出Comparator类:
package com;
import java.util.Comparator;
public class DemoComparator implements Comparator <Integer> {//注意是完成Comparator接口,而不是继承
public int compare(Integer o1, Integer o2) {//很简单的一个类似于C++中的cmp函数
return o1 - o2;
}
}
然后是实现类:
package com;
import java.util.Scanner;
import java.util.Arrays;
public class DemoSortByInteger {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n;
while (input.hasNext()) {
n = input.nextInt();
Integer[] a = new Integer[n];
for (int i = 0; i < n; i++) {
String s = input.next();//取字符串用的是input.next();直接就取来的是String类型的
a[i] = Integer.valueOf(s);//其实Integer中的许多办法都是static的,所以直接用Integer就可以的,然后记得每次用的时候都会返回一个Integer的对象
}
Arrays.sort(a, new DemoComparator()); // 用comparator来对对象进行排序,这个真的狠棒
//如果用的是List的话就得用collections容器了,
for (int i = 0; i < n; i++) {
System.out.println(a[i]);//Integer类中存的就是String类型的int类型的数据,所以直接输出就可以了
}
}
}
}