Создание массива объектов


Я создал класс под названием 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);
    }
}

И я также начал создавать класс под названием pond, который должен иметь атрибут под названием '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 2

4 ответа:

Вам нужно использовать 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();
    }

}

Измените это:

private Object[] fish;

Следующим образом:

private Fish[] fish;

То есть это рыбы, а не просто какие-то
виды объектов (они не млекопитающие, например).

Следующее недопустимо -

fish.add aFish;

С массивами вы делаете

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

Также необходимо инициализировать массив

fish = new Fish[capacity];

В вашем конструкторе.

В конструкторе Pond вы присваиваете частные поля аргументам конструктора. Я думаю, что все должно быть наоборот:

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

Примечание: объявление Pond аргументов конструктора final будетпредотвращать такого рода ошибки во время компиляции.

Кроме того, если вы хотите развернуть массив fish во время выполнения, то array не является лучшим выбором типа контейнера. ArrayList<Fish> является лучшим выбором, поскольку он может расширяться во время выполнения.