2017-03-01 53 views
0

所以我试图返回类型“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; 
    } 


} 

,误差在公共t最大():

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最大(){空指针的

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

后错误消息请。 – shmosel

+0

“线程中的异常”main“java.lang.NullPointerException \t at myUtil.SimpleListAry.max(SimpleListAry.java:77)”line 77指向myList.compareTo line –

+0

您正在混淆列表的大小与底层阵列的长度。 – shmosel

回答

1

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

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

第二种情况是该问题,而不考虑实际尺寸,因为整个底层阵列的元件被比较的名单。

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

只需卸下size()方法中的赋值语句(以及使用该方法在比较环路)

相关问题