Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么array.sort不能通过这样的数组工作?_Java_Arrays - Fatal编程技术网

Java 为什么array.sort不能通过这样的数组工作?

Java 为什么array.sort不能通过这样的数组工作?,java,arrays,Java,Arrays,我大约两周前才开始编程,所以请不要太严格:) 我试图解决一个编程练习,以打印数组中的3个最大元素,但.sort方法无效 报告了一个错误,我不知道为什么。似乎我用错误的方式声明了数组,但我无法发现错误 public static void main(String[] args) { int [] elements = {1, 4, 17, 7, 25, 3, 100}; int k = 3; System.out.println("Original Array: ");

我大约两周前才开始编程,所以请不要太严格:)

我试图解决一个编程练习,以打印数组中的3个最大元素,但.sort方法无效

报告了一个错误,我不知道为什么。似乎我用错误的方式声明了数组,但我无法发现错误

public static void main(String[] args) {
    int [] elements = {1, 4, 17, 7, 25, 3, 100};
    int k = 3;
    System.out.println("Original Array: ");
    System.out.println(Arrays.toString(elements));
    System.out.println(k +" largest elements of the said array are:");
    Arrays.sort(elements, Collections.reverseOrder());         
   for (int i = 0; i < k; i++) 
      System.out.print(elements[i] + " ");
}
publicstaticvoidmain(字符串[]args){
int[]元素={1,4,17,7,25,3100};
int k=3;
System.out.println(“原始数组:”);
System.out.println(array.toString(elements));
所述数组的最大元素为:”;
数组.sort(元素、集合.reverseOrder());
for(int i=0;i
}因为整数是对象,也不是对象。它们需要装箱,即整数

解开

int[]元素={1,4,17,7,25,3100};
盒装

Integer[]元素={1,4,17,7,25,3100};
使用Java8流
int[]元素={1,4,17,7,25,3100};
int[]sortedUnboxed=IntStream.of(元素)
.boxed()
.sorted(Comparator.reverseOrder())
.mapToInt(值->值)
.toArray();
整数[]sortedBox=IntStream.of(元素)
.boxed()
.sorted(Comparator.reverseOrder())
.toArray(整数[]::新建);

int[]
作为集合。reverseOrder不适用于基元类型。请改用
整数
。它将解决这个问题。

看看反转顺序的定义:

它会告诉你它看起来像这样:

public static <T> Comparator<T> reverseOrder()
公共静态比较器reverseOrder()
是通用模板。原语不能用作泛型类型,请参阅

int
是基本类型。幸运的是,
Integer
是一个围绕
int
的包装类,您可以将其用作泛型。剩下的是学生的家庭作业


我感觉到你的痛苦,
int
不能是泛型,但它就是这样。

其他答案涉及如何反转原始
int
数组,但根据你的问题,似乎你根本不需要反转数组

通过更改
条件,只需从末尾开始遍历数组:

public static void main(String[] args)
{
    int [] elements = {1, 4, 17, 7, 25, 3, 100};
    int k = 3;
    System.out.println("Original Array: ");
    System.out.println(Arrays.toString(elements));
    System.out.println(k +" largest elements of the said array are:");
    Arrays.sort(elements);         
    for (int i = elements.length - 1; i > elements.length - k; i--) 
      System.out.print(elements[i] + " ");
}
输出:

Original Array: 
[1, 4, 17, 7, 25, 3, 100]
3 largest elements of the said array are:
100 25 17 

如果您想坚持使用int,只需对其进行排序并打印出最后三个:

public static void main(String[] args) 
{
    int [] elements = {1, 4, 17, 7, 25, 3, 100};
    int k = 3;
    System.out.println("Original Array: ");
    System.out.println(Arrays.toString(elements));
    System.out.println(k +" largest elements of the said array are:");
    Arrays.sort(elements);         
    for (int i = 0; i < 3; i++) 
      System.out.print(elements[elements.length - 1 - i] + " ");
}
publicstaticvoidmain(字符串[]args)
{
int[]元素={1,4,17,7,25,3100};
int k=3;
System.out.println(“原始数组:”);
System.out.println(array.toString(elements));
所述数组的最大元素为:”;
数组。排序(元素);
对于(int i=0;i<3;i++)
System.out.print(elements[elements.length-1-i]+“”);
}