Привет! Условие: есть главный класс и дополнительный класс к этому классу. В главном классе есть кот, которого можно кормить, поить и просить мяукать. При каждом «мяу» вес кота уменьшается на 1 грамм. В дополнительном классе прописаны «кошачьи» методы, которые используются в главном классе. Нужно выполнить несколько заданий и все отправить одним проектом. Но я не могу выполнить два задания:
- Создать в классе Cat ещё один конструктор так, чтобы массу кошки можно было задавать при создании кошки, и создать в главном классе метод генерации кошки.
- Создать у кошки метод создания её “глубокой” копии.
Отправил преподу вот этот код, и он мне ответил:
Зачем
Cat(double weight, double minWeight, double originWeight, double maxWeight)
{
this(weight, weight, minWeight, maxWeight, 0.0);
}
? Он нигде не используется. Разве он правильно вызывает первичный конструктор?
Разве
public Cat(Cat other)
{
this(other.weight, other.originWeight, other.minWeight, other.maxWeight, other.eatenFood);
}
правильно создает копию?
Ну и вопрос: что вообще делать? как исправить код? что вообще можно почитать именно по этим темам: конструктор в Java и копирование в Java?
Главный класс Loader:
public class Loader { public static void main(String[] args) { System.out.println("catCount = " + Cat.getCount()); Cat cat = new Cat(); System.out.println(cat.getWeight()); while(cat.isAlive()) { cat.meow(); } System.out.println(cat.getStatus()); Cat cat1 = getKitten(); System.out.println("catCount = " + cat1.getCount()); cat1.feed(999.9); System.out.println("catCount = " + cat1.getCount()); cat1.meow(); System.out.println("catCount = " + cat1.getCount()); cat1.restroom(); System.out.println("catCount = " + cat1.getCount()); cat1.feed(999.9); System.out.println("catCount = " + cat1.getCount()); cat1.meow(); System.out.println("catCount = " + cat1.getCount()); System.out.println("eatenFood = " + cat1.getEatenFood()); } public static Cat getKitten() { double weight = 100 + 100 * Math.random(); return new Cat (weight); }
Дополнительный класс Cat:
public class Cat { private Double originWeight; private Double weight; private Double minWeight; private Double maxWeight; private double eatenFood; private static int count; public Cat() { this(1500.0 + 3000.0 * Math.random()); } public Cat(double weight) { this(weight,100.0, weight, 9000.0, 0.0); } private Cat(double weight, double minWeight, double originWeight, double maxWeight, double eatenFood) { this.weight = weight; this.originWeight = originWeight; this.minWeight = minWeight; this.maxWeight = maxWeight; this.eatenFood = eatenFood; if(isAlive()) count++; } Cat(double weight, double minWeight, double originWeight, double maxWeight) { this(weight, weight, minWeight, maxWeight, 0.0); } public Cat(Cat other) { this(other.weight, other.originWeight, other.minWeight, other.maxWeight, other.eatenFood); } private void setEatenFood(double eatenFood) { this.eatenFood = eatenFood; } private void addEatenFood(double eatenFood) { setEatenFood(getEatenFood() + eatenFood); } public double getEatenFood() { return eatenFood; } public static int getCount() { return count; } public void meow() { if (isAlive()) { addWeight(-1.0); System.out.println("Meow"); } } public void feed(Double amount) { if (isAlive()) { addWeight(amount); addEatenFood(amount); } } public void drink(Double amount) { addWeight(amount); } private void setWeight(Double weight) { if (isAlive()) { this.weight = weight; if (isAlive()) { count--; } } } private void addWeight(Double weight) { setWeight(getWeight() + weight); } public Double getWeight() { return weight; } public Double getOriginWeight() { return originWeight; } public void restroom() { if (isAlive()) { double shrinkage = Math.random() * 20.0; addWeight(-shrinkage); System.out.println("Weight shrinkage = " + shrinkage); } } public String getStatus() { if(weight < minWeight) { return "Dead"; } else if(weight > maxWeight) { return "Exploded"; } else if(weight > originWeight) { return "Sleeping"; } else { return "Playing"; } } public boolean isAlive () { return getWeight() >= minWeight && getWeight() <= maxWeight; } public Cat copy() { return new Cat(this); } public static Cat copy(Cat other) { return new Cat (other); } }