gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:48:25 25 4
gpt4 key购买 nike

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

}

我也尝试使用“>”来比较它们,但这也不起作用。可能是因为数据类型的原因,但只有当我尝试运行它并且它直接指向 T max() 中的这一行时,IDE 中才没有错误{

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

最佳答案

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

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

第二种情况是问题所在,因为在比较整个底层数组的元素时没有考虑列表的实际大小。

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

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

关于java - 尝试获取数组中的最大值时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42541790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com