Привет! Условие: есть главный класс и дополнительный класс к этому классу. В главном классе есть кот, которого можно кормить, поить и просить мяукать. При каждом «мяу» вес кота уменьшается на 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);
}
}









