Перейти к содержимому



Питон

Регистрация: 25 июн 2018
Off Активность: авг 07 2019 22:57

Мои темы

Java. Создать конструктор и создать метод создания "глубокой копии"

12 Сентябрь 2018 - 21:56

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

}

Java. Помогие исправить код

31 Август 2018 - 10:10

Привет! Условие: есть главный класс и дополнительный класс к этому классу. В главном классе есть кот, которого можно кормить, поить и просить мяукать. При каждом «мяу» вес кота уменьшается на 1 грамм. В дополнительном классе прописаны «кошачьи» методы, которые используются в главном классе.  Ну и у меня задание «замяукать» кота до смерти, то есть чтобы кот мяукнул столько, чтобы его вес стал меньше килограмма. Ну я его сделал, а дальше нужно  сделать другие задания и все поместить в один проект Cat. Ну и я закомментировал этот код с первого задания (то есть код, где цикл while). А теперь вопрос: как раскомментировать код так, чтобы он работал вместе с остальным кодом? Попробовал вот так и не вышло. Если для этого нужно создать двух котов (один для цикла while, другой для остального кода), то как это сделать?

Главный класс 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(1000 <= cat.getWeight()) {
            cat.meow();
        }

        System.out.println(cat.getStatus());

        Cat cat = getKitten();

//  здесь intellij idea подчеркивает cat и пишет "variable 'cat' is already defined in the scope". Что это значит?
        System.out.println("catCount = " + Cat.getCount());
        cat.feed(999.9);
        System.out.println("catCount = " + Cat.getCount());
        cat.meow();
        System.out.println("catCount = " + Cat.getCount());
        cat.restroom();
        System.out.println("catCount = " + Cat.getCount());
        cat.feed(9999999.9);
        System.out.println("catCount = " + Cat.getCount());
        cat.meow();
        System.out.println("catCount = " + Cat.getCount());

        System.out.println("eatenFood = " + cat.getEatenFood());
    }

    public static Cat getKitten()
    {
        double weight = 100 + 100 * Math.random();
        return new Cat();
    }
}

 

Дополнительный класс 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, weight, 1000.0, 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);
     }

}

×

Зарегистрируйся моментально!