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














Фотография
Нужна помощь

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



  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 Питон

Питон
  • Сливапер LVL 1
  • Сообщений: 4
  • Регистрация: 25.06.2018
  • Заработано: 0 руб.
Репутация: 0

Награды: 6

  
  
  
  
  
  

Отправлено 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);
    }

}

  • 0

#2 DoctorDoc

DoctorDoc
  • Сливапер LVL 6
  • Сообщений: 1 192
  • Регистрация: 10.02.2014
  • Заработано: 119 руб.
Репутация: 652

Награды: 22

  
  
  
  
  
  
  
  

Отправлено 13 Сентябрь 2018 - 12:37

Ты форумом ошибся...


  • 0

#3 hoz

hoz

    Алень

  • Сливапер LVL 3
  • Сообщений: 1 032
  • Регистрация: 19.10.2014
  • Заработано: 220 руб.
Репутация: 11

Награды: 22

  
  
  
  
  
  
  
  

Отправлено 13 Сентябрь 2018 - 22:59

Если ты взялся за выполнение тестового задания перед трудоустройством то, пр таких познания не сможешь всё-равно работать. Это элементарные вещи. Изучай всё с нуля..


  • 0

#4 vinty

vinty
  • Сливапер LVL 1
  • Сообщений: 6
  • Регистрация: 19.01.2019
  • Заработано: 0 руб.
Репутация: 2

Награды: 6

  
  
  
  
  
  

Отправлено 21 Январь 2019 - 17:42

Смотри... тебе надо прочесть: Брюс Эккель - философия Java, либо Герберт Шилд - Java 8 Руководство для начинающих. Обязательно! Его этого полно везде на любом раздатчике литературы.

Без этого любые советы тебе бесполезны. Все с этого начинали, если не проходили спец курсы или не изучали в институте (НО И ТАМ ИМЕННО ЭТИ КНИГИ РЕКОМЕНДУЮТ).

На вопросы, которые ты задаешь - трудно ответить тому, кто не понимает как это устроено. 

 

Начал было писать тебе код, но потом понял, что оказываю медвежью услугу. Правда... почитай, то что  я дал. Это простые вещи, которые ты поймешь в самом начале.

Не сможешь ты пройти мимо этого. 


  • 0



Похожие темы Collapse

  Название темы Форум Автор Статистика Последнее сообщение

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

×

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