java 数组排序降序
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/31901543/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Array Sorting Descending Order
提问by Hugo Diaz
I'm a new programmer to java, been using this website a lot to learn the ways. Today I've stumbled into another problem towards a program I'm doing for practice.
我是 Java 的新程序员,经常使用这个网站来学习方法。今天,我在为练习而做的一个程序中遇到了另一个问题。
I have an array:
我有一个数组:
final int EXAMS = 5;
int[] scores = new int [EXAMS];
The values for this array are then asked from the user through a Scanner object:
然后通过 Scanner 对象向用户询问此数组的值:
for (int index = 0; index < EXAMS; index++)
{
System.out.println("Enter the score for " + (index+1) +":");
scores[index] = kb.nextInt();
if (scores[index] < 0){
System.out.println("The number you have entered is invalid.");
scores[index] = kb.nextInt();
}
}
I managed to make an ascending order sorting of the values "scores[]":
我设法对值“scores[]”进行升序排序:
Arrays.sort(scores);
System.out.println("The sorted int array is:");
for (int number : scores)
{
System.out.println("Number = "+ number);
}
But I want the sorting to be in descending order. When I put the
但我希望排序按降序排列。当我把
Arrays.sort(scores, Collections.reverseOrder());
Arrays.sort(scores, Collections.reverseOrder());
I get an error saying: "no suitable method found for sorting." Please help.
我收到一条错误消息:“找不到合适的排序方法。” 请帮忙。
采纳答案by Eran
There's no sort
method in Arrays
class that accepts an int[]
and a Comparator
. The sort
methods in the Arrays
class that accept a Comparator
require an array of reference type (while an int[]
is an array of a primitive type).
有没有sort
在方法Arrays
的类,它接受int[]
和Comparator
。所述sort
的方法中Arrays
类接受一个Comparator
需要引用类型的阵列(而一个int[]
是基本类型的阵列)。
If you change the type of your scores
array from int[]
to Integer[]
, your code will work, since the method public static <T> void sort(T[] a, Comparator<? super T> c)
of the Arrays
class will match your Arrays.sort(scores, Collections.reverseOrder());
call.
如果你改变你的类型scores
的数组int[]
到Integer[]
,你的代码将工作,因为该方法public static <T> void sort(T[] a, Comparator<? super T> c)
的的Arrays
类将符合您的Arrays.sort(scores, Collections.reverseOrder());
通话。
final int EXAMS = 5;
Integer[] scores = new Integer [EXAMS]; // the only required change
for (int index = 0; index < EXAMS; index++) {
System.out.println("Enter the score for " + (index+1) +":");
scores[index] = kb.nextInt();
if (scores[index] < 0){
System.out.println("The number you have entered is invalid.");
scores[index] = kb.nextInt();
}
}
Arrays.sort(scores, Collections.reverseOrder());
System.out.println("The sorted int array is:");
for (int number : scores) {
System.out.println("Number = "+ number);
}
回答by alfasin
The following works (using the Integer
Objects instead of primitive int
):
以下工作(使用Integer
Objects 而不是 original int
):
Integer[] test = {1, 2, 4, 3, 5};
Arrays.sort(test, Collections.reverseOrder());
System.out.println(Arrays.toString(test)); // [5, 4, 3, 2, 1]
回答by Danny Varela
Collections.reverseOrder()
Won't work because the array is of primitive type. You can change from int to Integer or try something different like:
不会工作,因为数组是原始类型。您可以将 int 更改为 Integer 或尝试不同的方法,例如:
Arrays.sort(scores);
ArrayUtils.reverse(scores);
Your final option would be to make your own code.
您的最终选择是制作自己的代码。
回答by Nitesh Virani
You just need to change your array type from Primitive type
to Primitive wrapper class
i.e. int[] scores = new int [EXAMS]
to Integer[] scores = new Integer[EXAMS]
你只需要改变你的数组类型从Primitive type
到Primitive wrapper class
ieint[] scores = new int [EXAMS]
到Integer[] scores = new Integer[EXAMS]
Arrays.sort
accept wrapper array in the first argument not primitive.
Arrays.sort
在第一个参数中接受不是原始参数的包装器数组。
回答by Parag Kadam
Arrays.sort(a, Collections.reverseOrder());
does not work with primitives. Try this,
不适用于原语。试试这个,
Integer[] a = new Integer[]{1,2,3,5,4};
Arrays.sort(a,Collections.reverseOrder());
for(int i:a)
{
System.out.println(i);
}
回答by pramod kumar
There is no sort method for arrays in java.But ArrayList have a sort method.You can the below code to sort the list in reverse order.
java中没有数组的排序方法。但是ArrayList有排序方法。可以通过下面的代码对列表进行逆序排序。
List l=new ArrayList();
l.add(5);
l.add(1);
l.add(2);
l.add(3);
Collections.sort(l,Collections.reverseOrder());
System.out.println(l);