gpt4 book ai didi

java - 在类中定义的方法在泛型类 (Java) 中找不到

转载 作者:行者123 更新时间:2023-12-02 04:12:56 25 4
gpt4 key购买 nike

我正在尝试用 Java 创建一个 ArrayList 类,作为家庭作业。我们已经获得了大部分方法概要,并由我们来实现。其中一种方法是,如果列表的当前大小无法支持添加附加元素(最多达到特定大小),则扩大通用列表。然而,每次我尝试编译以下内容时,都会出现错误:.enlarge 无法识别。这是列表和构造函数的声明

public class ArrayList<E extends Comparable<E>> {
private final int DEFCAP = 50;
private int origCap;
private int numElements;
private Object[] list;

/* Method Name : ArrayList()
Parameters : None
Return value(s) : Constructor
Partners : None
Description : Increase the sales of the Employee at the given index by the given double amount.
*/
public ArrayList() {
origCap = DEFCAP;
numElements = 0;
list = (E[]) new Object[DEFCAP];
}

/* Method Name : ArrayList()
Parameters : int size
Return value(s) : Constructor
Partners : None
Description : Increase the sales of the Employee at the given index by the given double amount.
*/
public ArrayList(int size) {
try {
if(size > DEFCAP || size < 1) {
throw new InvalidSizeException();
}
origCap = size;
numElements = 0;
list = (E[]) new Object[origCap];
} catch (InvalidSizeException ISE) {
System.err.println("Size too large");
}
}

这是调用放大的方法:

    public void addItem(E item) throws MaximumCapacityException {
try {
if((numElements + 1 ) >= DEFCAP) {
throw new MaximumCapacityException();
} else if (numElements >= origCap && numElements < DEFCAP) {
list.enlarge();
list[numElements - 1] = item;
numElements++;
} else {
list[numElements - 1] = item;
numElements++;
}

} catch (MaxiumumCapacityException MCE) {
System.err.println("List at maximum capacity");
}
}

这是放大方法本身:

    private void enlarge() throws MaximumCapacityException {
try {
if(list.length() == DEFCAP) {
throw new MaximumCapacityException();
} else if((list.length() + origCap > DEFCAP) && list.length() <= DEFCAP) {
Object[] newlist = (E[]) Object[DEFCAP];
for(int i = 0; i < numElements;i++) {
newlist[i] = list[i];
}
list = newlist;
} else {
Object[] newlist = (E[]) Object[DEFCAP];
for(int i = 0; i < numElements;i++) {
newlist[i] = list[i];
}
list = newlist;
}
} catch(MaxiumumCapacityException MCE) {
System.err.println("Size too large");
}
}

这是错误消息:

ArrayList.java:54: error: cannot find symbol
list.enlarge();
^

符号:放大方法() location:Object[]类型的变量列表

在这个问题上我正在用头撞墙。这是一项家庭作业,但我一生都无法弄清楚为什么它不能编译。如果我正确理解该错误,则意味着编译器仍然认为 list 是 Object 类型。当它在构造函数中转换为 E[] 时,它不应该改变吗?或者这只是改变数组的元素?

如有任何帮助,我们将不胜感激。如果还有其他错误,请随时指出,但我想一旦我弄清楚了这一点,我就可以开始解决这些错误。

最佳答案

这里有两个概念:

  • 您正在实现的 ArrayList
  • list 对象数组,它是 Arraylist 的一个字段,也是 ArrayList 在内部用来保存其数据的对象。

您不放大内部数据。 enlarge 是您在 ArrayList 上定义的行为。 enlarge 方法的主体完成放大内部数组的工作。正如 Francisco's answer 中提到的,您对 enlarge 的调用应该是 this.enlarge() 语句(或只是 enlarge())。

...
else if (numElements >= origCap && numElements < DEFCAP) {
this.enlarge(); // not list.enlarge()
list[numElements - 1] = item;
numElements++;
}
...

关于java - 在类中定义的方法在泛型类 (Java) 中找不到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33613213/

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