gpt4 book ai didi

Java - 如何在不同的类中调用 add() 方法

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

这是作业,我对自己无法弄清楚如此简单的事情感到有点沮丧。

为了简化我的代码,我现在有 3 个文件:一个带有我创建的 add() 方法的类,一个测试它的文件(由教授创建),以及一个创建对象的文件(我创建的)不会发布,因为它正在工作)。这是 add() 函数。

编辑2:我要添加打印数组的方法,也许这就是问题所在?

    public class Population {
private Person[] pop = new Person[15];
private int numPop = 0;

public void add(Person c){ // this object is created in another class, it works fine
for(int i = 0; i < pop.length; i++){
if(pop[i] == null) {
pop[i] = c;
numPop++;
} else {}
}

public String listPeople(){
System.out.println("Population with "+numPeople+" people as follows:");
int i = 0;
while (i<numPeople){
System.out.println("A "+pop[i].getAge()+"year old person named "+pop[i].getName());
i++;
//FYI the get methods are working fine and are in another file.
}
return("");
}

然后,我在提供给我们的测试文件中运行该程序以确保其正常工作。这是不起作用的部分

public class PopTestProgram{ // FYI the prof created this, I can't change this
public static void main(String[] args){

Population pop = new Population(15);

pop.add(new Person(4, "Bob"));
pop.add(new Person(25, "Kim"));
// then adds 8 more people with different ages and names
// then prints the people

它可以编译,但是当我运行它时,它只是将最后一个人的 10 个人放入数组中,然后崩溃,说 "pop[i] = c;" 行有问题。我根本不知道我需要在这里改变什么。

我没有直接收到教授发来的电子邮件,所以我想我应该在这里问。

编辑:这是打印最后一个人 10 次后显示的内容。它显示了我尚未完成的其他方法的问题...

java.lang.ArrayIndexOutOfBoundsException: -1
at Population.removePerson(Population.java:49)
at PopTestProgram.main(PopTestProgram.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

最佳答案

在add(Person)中,当你添加一个项目时,你不会停止,所以你添加的第一个项目被放入数组中的所有单元格中,然后其余的根本不会进入,因为没有更多的数组中的空单元格。当找到空位置时打破循环。

public void add(Person c) {
for(int i = 0; i < pop.length; i++){
if(pop[i] == null) {
pop[i] = c;
numPop++;
break;
}
else {
//.....
}
}
}

也可以使用 numPop 作为列表中的下一个位置,例如:

public void add(Person c) {
if (numPop < pop.length) {
pop[numPop++] = c;
}
}

关于Java - 如何在不同的类中调用 add() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35233432/

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