Collections.max(array)不工作 - Java

时间:2014-02-01 00:03:04

标签: java arrays

我正在使用Collections.max(array);确定所选数组中的最大数字是多少。但是,当我使用它时,我收到错误消息:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The method max(Collection<? extends T>) in the type Collections is not applicable for the arguments (int)

    at Array_6.main(Array_6.java:23)

我的代码如下:

    int input;
    int highestNumber = 0;
    int arrayNumber = 0;


    int[] intArray = new int[10];

    System.out.println("This application determines the highest number out of 10 inputed numbers");
    System.out.println("Welcome, please input the first number:");
    for (int i = 0; i < 10; i++){
        System.out.print(i+1 + ": ");
        input = TextIO.getlnInt();  // Retrieves input
        intArray[i] = input;
    }

    highestNumber = Collections.max(arrayInt);

    System.out.println("Highest Number is " + highestNumber);

修改

我做了下面推荐的内容和消息

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
Type mismatch: cannot convert from int[] to int
Bound mismatch: The generic method max(Collection<? extends T>) of type Collections is not applicable for the arguments (List<int[]>). The inferred type int[] is not a valid substitute for the bounded parameter <T extends Object & Comparable<? super T>>

at Array_6.main(Array_6.java:24)

出现,所以我将int highestNumber更改为一个数组。然后出现此错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Bound mismatch: The generic method max(Collection<? extends T>) of type Collections is not applicable for the arguments (List<int[]>). The inferred type int[] is not a valid substitute for the bounded parameter <T extends Object & Comparable<? super T>>

at Array_6.main(Array_6.java:24)

2 个答案:

答案 0 :(得分:5)

Collections是集合API的实用程序类。 arrayInt是一个int数组,与Collections类提供的任何内容完全不兼容

您可以尝试使用...

highestNumber = Collections.max(Arrays.asList(intArray));

intArray包裹在List界面中,使其与Collections API

兼容

正如@LouisWasserman指出的那样,上述内容将不起作用,因为Collections.max将取消基于Object的基于Collection非基元。

最简单的解决方案可能是在输入时检查每个值,例如....

for (int i = 0; i < 10; i++) {
    System.out.print(i + 1 + ": ");
    input = TextIO.getlnInt();  // Retrieves input
    intArray[i] = input;
    highestNumber = Math.max(input, highestNumber);
}

或者您也可以使用Arrays.sort(intArray)intArray进行排序,然后选择数组中的最后一个元素,这将是最高的......

或者您可以创建第二个循环并使用intArray遍历Math.max中的每个元素以查找最大值...

或者您可以创建List<Integer>集合并将intArray中的每个项目添加到其中,然后使用Collections.max ...

或者您可以使用Integer[]数组而不是int[]数组...

或者您可以创建一个List<Integer>集合,而不是完全使用数组......

答案 1 :(得分:1)

在Java 8中,

highestNumber = Arrays.stream(intArray).max().getAsInt();