所以我一直试图得到我的整数数组的平均值,我的方法没有做到最大,因为我试图将对象引用适合原语..我尝试使用intValue而我认为我用它错了..任何想法?
//Variation 3 - Choose Mean as pivot
private static int getMeanIndexAsPivotIndex(Comparable comparableArray[],int leftIndex, int rightIndex) {
int sum = 0;
int add = 0;
for (int i = 0; i < comparableArray.length; i++) {
add = comparableArray[i].intValue();
sum += add;
}
return sum / comparableArray.length;
}
这是我制作数组的地方
//Random Array
Integer[] unsortedArray = new Integer[8];
for (int i = 0; i < unsortedArray.length; i++) {
unsortedArray[i] = randomRange(0,1000);
}
QuickSort.java:157: error: cannot find symbol
add = comparableArray[i].intValue();
^
symbol: method intValue(int)
location: interface Comparable
Note: QuickSort.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error
答案 0 :(得分:0)
根据您的签名comparableArray
类型为Comparable[]
而不是Integer[]
,此类型没有.intValue()
方法。
更改方法签名以使用Integer[]
可以解决问题。
答案 1 :(得分:0)
阐述@ EricBouwers的答案。
类Integer
扩展了类Number
并实现了Comparable
接口,即类声明是
public final class Integer extends Number implements Comparable<Integer>
在类中实现Comparable
意味着该类提供了一种方法(方法),可以使用compareTo
方法在类的不同实例之间进行比较。此方法是{{1>}接口中声明的唯一一个,实现接口的类中实现。
这与类Comparable
的{{1}}方法无关。此方法在类intValue
中声明并实现,并由其子类Integer
覆盖。它取消装箱 Number
对象(类的实例)到Integer
原语。
至于你的代码,你试图为Integer
接口调用int
,但是在那里是未定义的,因此intValue
(符号是你试图调用的方法) 。您感到困惑,因为Comparable
&#34;包括&#34; error: cannot find symbol
,但它没有相反的方法。
你可以写这个:
Integer
但是Comparable
Comparable<Integer>[] arr = new Integer[]{1,2,3};
arr。
你不能写这个:
intValue
虽然理论上您可能认为您可以在Comparable
上同时调用Integer
和compareTo
。
您需要做的是:
Integer[] arr = new Comparable<Integer>[]{1,2,3};
然后您可以在intValue
上调用compareTo
和arr
。