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








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

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



Лучший Ответ Dieseluga, 01 Сентябрь 2018 - 09:21

Для каждого задания используй отдельную переменную: cat1, cat2, cat3 и т. д. Или ещё лучше массив. Экземпляры создаются с помощью ключевого слова new. Сначала создаёшь объекты, только потом выводишь getCount(), ну и уничтожаешь их, как там сказано... Условие должно закончиться, когда кот умрёт от голода, а не когда масса будет меньше 1000, это не одно и то же. Соответственно

while (cat1.isAlive()) {...}
Ну или если мы всё-таки хотим использовать знание про массу, то проще создать кота в 1 кг, и убить одним чихом
Cat cat1 = new Cat(1000);cat.meow();
В целом:
public class Loader {    public static void main(String[] args)    {        Cat[] cats = {                new Cat(1000), // можно просто new Cat()                new Cat(),                new Cat(),                // здесь создаёшь столько котов сколько понадобится        };        System.out.println("Cat count: " + Cat.getCount());        // Обращаешься к объекту по имени массива и индексу в квадратных скобках.        // Индексы начинаются не с 1, а с 0. То есть cats[0] - первый кот, cats[9] - десятый        while (cats[0].isAlive()) {            cats[0].meow();        }        System.out.println(cats[0].getStatus());        // ну и т.п., что там тебе необходимо    }}
И так, к слову, не надо скидывать скриншоты, достаточно показать код и/или вывод

UPD Если нужно использовать getKitten, то вместо new Cat() надо писать getKitten() Перейти к сообщению


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

#1 Питон

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

Награды: 7

  
  
  
  
  
  
  

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

}

  • 0

#2 Alex_MB

Alex_MB
  • Сливапер LVL 6
  • Сообщений: 361
  • Регистрация: 17.04.2014
  • Заработано: 198 руб.
Репутация: 901

Награды: 19

  
  
  
  
  
  
  
  

Отправлено 31 Август 2018 - 15:38

Ты уже определил переменную тут: Cat cat = new Cat();

 
Можешь или использовать ее: cat = getKitten(); или создать новую Cat cat2 = getKitten();
 
По контексту программы лучше даже так: Cat kitten = getKitten();

Сообщение отредактировал Alex_MB: 31 Август 2018 - 15:41

  • 0

#3 Питон

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

Награды: 7

  
  
  
  
  
  
  

Отправлено 31 Август 2018 - 16:12

Alex_MB, ну ничего не выходит. Вот два скрина: На первом я закомментировал цикл и вывод в консоли ну типо меня устраивает. Вот второй скрин, где переменная cat1, но вывод не печатает статус кота, который должен умереть и не печатает то, что произошло с cat1. Что я делаю неправильно?

 

pppppng_5332668_30740700.png

jjjjjpng_8789576_30740703.png


  • 0

#4 Alex_MB

Alex_MB
  • Сливапер LVL 6
  • Сообщений: 361
  • Регистрация: 17.04.2014
  • Заработано: 198 руб.
Репутация: 901

Награды: 19

  
  
  
  
  
  
  
  

Отправлено 31 Август 2018 - 17:09

System.out.println("catCount = " + Cat.getCount());

надо тоже изменить на 

System.out.println("catCount = " + Cat1.getCount());


  • 0

#5 Питон

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

Награды: 7

  
  
  
  
  
  
  

Отправлено 31 Август 2018 - 18:43

Alex_MB, Ну не получается опять.

ebalapng_7761071_30741233.png


  • 0

#6 Dieseluga

Dieseluga
  • Platinum
  • Сообщений: 5
  • Регистрация: 01.08.2016
  • Заработано: 0 руб.
Репутация: 0

Награды: 13

  
  
  
  
  
  
  
  

Отправлено 01 Сентябрь 2018 - 09:21   Лучший Ответ

Для каждого задания используй отдельную переменную: cat1, cat2, cat3 и т. д. Или ещё лучше массив. Экземпляры создаются с помощью ключевого слова new. Сначала создаёшь объекты, только потом выводишь getCount(), ну и уничтожаешь их, как там сказано... Условие должно закончиться, когда кот умрёт от голода, а не когда масса будет меньше 1000, это не одно и то же. Соответственно
while (cat1.isAlive()) {...}
Ну или если мы всё-таки хотим использовать знание про массу, то проще создать кота в 1 кг, и убить одним чихом
Cat cat1 = new Cat(1000);cat.meow();
В целом:
public class Loader {    public static void main(String[] args)    {        Cat[] cats = {                new Cat(1000), // можно просто new Cat()                new Cat(),                new Cat(),                // здесь создаёшь столько котов сколько понадобится        };        System.out.println("Cat count: " + Cat.getCount());        // Обращаешься к объекту по имени массива и индексу в квадратных скобках.        // Индексы начинаются не с 1, а с 0. То есть cats[0] - первый кот, cats[9] - десятый        while (cats[0].isAlive()) {            cats[0].meow();        }        System.out.println(cats[0].getStatus());        // ну и т.п., что там тебе необходимо    }}
И так, к слову, не надо скидывать скриншоты, достаточно показать код и/или вывод

UPD Если нужно использовать getKitten, то вместо new Cat() надо писать getKitten()

Сообщение отредактировал Dieseluga: 01 Сентябрь 2018 - 10:08

  • 0



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

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

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

×

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