Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试获取数组中的最大值时出错_Java_Arrays_Sorting - Fatal编程技术网

Java 尝试获取数组中的最大值时出错

Java 尝试获取数组中的最大值时出错,java,arrays,sorting,Java,Arrays,Sorting,因此,我试图返回类型“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; pub

因此,我试图返回类型“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;
    }


}

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

  • myList
    -正在构造函数中初始化,不为空
  • myList[i]
    -列表最初填充为空
  • max
    ,取决于
    compareTo
    的实现方式-初始化为
    myList[0]
    ,如果列表为空,则可以为空
  • 第二种情况是问题,因为在比较整个底层数组的元素时,没有考虑列表的实际大小

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


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

    请发布错误消息。“线程”main中的异常”java.lang.NullPointerException位于myUtil.SimpleListAry.max(SimpleListAry.java:77)第77行指向myList.compareTo行您将列表的大小与基础数组的长度混淆了。我在for循环中将myList.length更改为可变大小,但仍然得到了相同的错误当然您得到了NPE。默认构造函数生成一个包含10个可调用项的数组。Callable是一个接口,没有具体的对象。因此,调用compareTo()是不可能的。
    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;
    
    if(myList[i].compareTo(max) == 1)