Создание массива объектов
Я создал класс под названием 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 ответа:
Вам нужно использовать
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>
является лучшим выбором, поскольку он может расширяться во время выполнения.