-1

我是 java 新手,在调用非静态方法时遇到问题

这是我的主要

    public static void main(String[] args) {
    Fish f1 = new Fish("Nemo");
    Fish f2 = new Fish("Dory");
    f2.setNumber(2);
    Fish m = new Fish("Bruce");
    m.setNumber(3);
    Fish.printAllFish();
}

这是我的鱼课

import java.util.ArrayList;
import java.util.List;


public class Fish {
protected String name;
protected int number;
protected List<Fish> fishList = new ArrayList<Fish>();


public Fish(String in){
name = in;
number = 1;
fishList.add(this);
}




public void printFish(){
    System.out.println("the fish called" + name + " is number " + number );
}
public void setNumber(int Number){
    this.number = number;
}
public int getNumber(){
 return number;   
}
public String getName(){
 return name;
}
public int getFishNumOf(){
    return fishList.size();

}

public void printAllFish(){
    int size = this.getFishNumOf();
    System.out.println("There are " + size + " fish:");
    for (int i = 0; i < size; i++){
        String a = getName();
        int b = getNumber();
        System.out.println("The Fish " + a + " is number " + b );
    }
}
}

尝试调用 printAllFish 时出现非静态错误,我知道我可能会犯一些新手错误,但我才刚刚开始学习编程,类、gets 和 set 之类的东西仍然让我感到困惑,非常感谢任何帮助!

4

3 回答 3

1

printAllFishnon-static方法,您试图以静态方式调用它,即使用类名而不是实例。

您应该使用实例之一来调用它,即 f1 或 f2:

f1.printAllFish();
于 2013-10-22T06:45:12.257 回答
1

您需要在 makeprintAllFish和staticgetFishNumOf之前删除关键字。然后在 for 循环中,您必须为循环的每次迭代指定要获取的鱼的名称和数量。例如:fishListthisgetFishNumOf

for(Fish f : fishList)
    String a = f.getName();
    int b = f.getNumber();
    System.out.println("The Fish " + a + " is number " + b );
}
于 2013-10-22T06:46:47.640 回答
0

你必须调用你的初始化对象方法。不是 Fish.printAllFish() 而是 f1.printAllFish()、f2.printAllFish() 或 m.printAllFish()

我建议使用另一个名为 FishContainer 的类,它有一个 Fish 对象的 List 对象,在初始化 Fish 对象时,将它添加到 FishContainer 的 list 属性中,然后从容器类调用 printAllFish()。像这样尝试:

FishContainer container = new FishContainer();
Fish f1 = new Fish("Nemo");
Fish f2 = new Fish("Dory");
f2.setNumber(2);
Fish m = new Fish("Bruce");
m.setNumber(3);

container.addFish(f1);
container.addFish(f2);
container.addFish(m);
container.printAllFish();
于 2013-10-22T06:45:34.507 回答