使用.intValue错了?

时间:2014-05-12 18:22:21

标签: java arrays integer quicksort

所以我一直试图得到我的整数数组的平均值,我的方法没有做到最大,因为我试图将对象引用适合原语..我尝试使用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

2 个答案:

答案 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上同时调用IntegercompareTo

您需要做的是:

Integer[] arr = new Comparable<Integer>[]{1,2,3};

然后您可以在intValue上调用compareToarr