制作一个对象数组

时间:2014-01-28 22:22:08

标签: java arrays class object hierarchy

我创建了一个名为Fish的课程:

public class  Fish {

    private String species;
    private int size;

    //Constructor
    public Fish(int x, String s) {
        size = x;
        species = s;
    }

    public String getSpecies() { return species; }

    public int getSize() { return size; }

    public String toString() {
        return String.format("A %dcm %s", size, species);
    }
}

我还开始创建一个叫做池塘的类,这个类有一个名为'fish'的属性,它包含一系列Fish对象。我不确定如何做到这一点。这是我到目前为止的尝试。我是

public class Pond {
    private int capacity;
    private Object[] fish; //This is what I am trying to initialize. list of Fish. 
    private int numFish;

    //Capacity Constructor 
    public Pond(int n, int c) {
        n = numFish;
        c = capacity; 
    }

    public int getNumFish() { return numFish; }

    public boolean isFull() {
        boolean isFull = false;
        if (numFish >= capacity) {
            isFull = true;
        }
        else {
            isFull = false;
        }
        return isFull;
    }

    public String toString() {
        return String.format("Pond with %d fish", numFish);
    }

    public void add(Fish aFish) {
        if (numFish <= capacity) {
            numFish += 1;
            fish.add Fish;
        }
        else {
            numFish += 0;
        }
    }
}

4 个答案:

答案 0 :(得分:1)

改变这个:

private Object[] fish;

如下:

private Fish[] fish;

即。这些都是鱼,而不仅仅是任何一种 各种物体(它们不是哺乳动物,例如)。

答案 1 :(得分:1)

Pond构造函数中,您将私有字段分配给构造函数参数。我认为应该是相反的方式:

public Pond(final int n, final int c) {
    numFish = n;
    capacity = c;
}

附注:在编译时声明Pond构造函数参数finalprevent出现这种错误。

此外,如果要在运行时展开fish数组,则array不是容器类型的最佳选择。 ArrayList<Fish>是一个更好的选择,因为它可以在运行时扩展。

答案 2 :(得分:1)

以下无效 -

fish.add aFish;

使用数组

fish[numFish] = aFish; //increment numFish after this

您还需要初始化数组

fish = new Fish[capacity];

在你的构造函数中。

答案 3 :(得分:0)

您需要使用ArrayList而不是Array,因为ArrayList可以根据需求增长。

看看这段代码。应该帮助你:

public class Fish {
String name;


public Fish(String name) {

    this.name=name; 

}

public String toString() {
    return name;
}
}

然后:

import java.util.*;

public class Pond {

ArrayList<Fish> fishInPond = new ArrayList<>();


public void addFish(Fish e) {

    fishInPond.add(e);
}

public void showFishes() {
    for (int i= 0; i<fishInPond.size();i++) {
        fishInPond.get(i);
   } 
    System.out.println("Fishes in my pond: " + fishInPond);
}


    public static void main(String[]args) {
        Pond myPond = new Pond();
        myPond.addFish(new Fish("Tilapia"));
        myPond.addFish(new Fish("cat fish"));

        myPond.showFishes();
    }

}