因此,我试图返回类型“ T”的数组列表中的最大值,并在使用compareTo时出现错误。这是完整的代码。

package myUtil;

public class SimpleListAry<T extends java.lang.Comparable<T>> extends java.lang.Object implements SimpleList<T> {
    private T[] myList;
    private int size;
    public SimpleListAry(){
       myList = (T[])new Comparable[10];
    }
    public SimpleListAry(int capacity){
        if (capacity <= 0){
            throw new IllegalArgumentException();
        }
        myList = (T[]) new Object [capacity];
    }

    @Override
    public int size() {
        size = myList.length;
        return size;
    }
    @Override
    public T get(int i) {
        return myList[i];
    }

    @Override
    public T set(int i, T item) {
        return myList[i] = item;
    }

    @Override
    public int indexOf(Object item) {
        for (int i = 0; i < size; i++){
            if (get(i).equals(item)){
                return i;
            }
        }
      return -1;
    }

    @Override
    public void add(int at, T item) {
        if (at < 0 || at > size)
            throw new ArrayIndexOutOfBoundsException(at);
        for (int i = size; i > at; i--){
            myList[i] = myList [i-1];
        }
//        myList[at] = item;
        size++;
    }


    @Override
    public T remove(int at) {
        if (at < 0 || at >= size)
            throw new ArrayIndexOutOfBoundsException(at);
        T item = myList[at];
        for (int i = at; i<size-1; i++)
            myList[i] = myList[i+1];
        size--;
        return item;
    }

    @Override
    public T max() {
        T max = myList[0];
        for (int i = 1; i < myList.length; i++){
            if(myList[i].compareTo(max) == 1)
                max = myList[i];
        }
        return max;
    }

    @Override
    public T min() {
        T min = myList[0];
        for (int i = 1; i < size -1; i++){
            if (myList[i].compareTo(min) == -1)
                min = myList[i];
        }
        return min;
    }


}


并且错误发生在Public T max()处:

public T max() {
T max = myList[0];
for (int i = 1; i < myList.length; i++){
    if(myList[i].compareTo(max) == 1)
        max = myList[i];
}
return max;


}

我也尝试使用“>”来比较它们,但是那也不起作用。可能是由于数据类型所致,但仅当我尝试运行它时,IDE才没有错误,并且它直接指向T max(){

if(myList[i].compareTo(max) == 1)

最佳答案

if(myList[i].compareTo(max) == 1)中的空指针的三种可能性


myList-在构造函数中初始化,不为null
myList[i]-列表最初填充为null!
max,取决于如何实现compareTo-初始化为myList[0],如果列表为空,则可以为null


第二种情况是问题,因为在不考虑列表实际大小的情况下比较了整个基础数组的元素。

size()方法是错误的,因为它会将返回的size变量设置为覆盖正确值的数组长度。

只需删除size()方法内的赋值语句(并在比较循环中使用该方法)

10-06 13:08
查看更多