Переменная не уменьшает свое значение на единицу

В настоящее время я пытаюсь создать приложение, в котором я пытаюсь воссоздать магазин соков, где люди могут что-то заказать. Количество оставшихся соков равно 3, и с каждым купленным соком количество уменьшается на единицу, и почему-то точное уменьшение не работает.

Надеюсь, вы сможете мне помочь...

Я создал два класса:

  1. Программа, в которой я дал 3 заказа:
public class Program {

    public static void main(String[] args) {
        
        
        JuiceStore Juice1 = new JuiceStore(14);
        JuiceStore Juice2 = new JuiceStore(7);
        JuiceStore Juice3 = new JuiceStore(17);
        
        try {
            Juice1.buyJuice();
            
        }
        catch(NoJuiceException e) {
            System.out.println();
            System.out.println(e.getMessage());
        }
        catch(TooColdException e) {
            System.out.println(e.getMessage());
        }
        catch(TooWarmException e) {
            System.out.println("The juice is too warm.");
        }
        
        try {
            Juice2.buyJuice();
            
        }
        catch(NoJuiceException e) {
            System.out.println();
            System.out.println(e.getMessage());
        }
        catch(TooColdException e) {
            System.out.println(e.getMessage());
        }
        catch(TooWarmException e) {
            System.out.println(e.getMessage());
        }
        
        try {
            Juice3.buyJuice();
            
        }
        catch(NoJuiceException e) {
            System.out.println();
            System.out.println(e.getMessage());
        }
        catch(TooColdException e) {
            System.out.println(e.getMessage());
        }
        catch(TooWarmException e) {
            //e.getMessage();
            System.out.println(e.getMessage());
        }
    }
}

2.JuiceStore, в котором я указал способ покупки:

public class JuiceStore {

    private int temperature;
    private int leftJuices = 3;
    
    JuiceStore(int temperature) {
        this.temperature = temperature;
    }
    
    public void buyJuice() throws NoJuiceException, TooColdException, TooWarmException  {
        if (this.leftJuices < 1) throw new NoJuiceException("Unfortunately, there is no juice left. Come back tomorrow.");
        
        this.leftJuices = leftJuices-1;
        System.out.println();
        System.out.println("You have bought a juice, there are " + this.leftJuices + " left.");
        if (this.temperature < 9) throw new TooColdException("The juice is too cold.");
        if (this.temperature > 15)throw new TooWarmException("The juice is too warm.");
        System.out.println("Drink successful.");
    }
    
    
}

Не по теме: ваш метод main имеет дублированный код, с той лишь разницей, какую переменную «Juice» он использует. Рассмотрите возможность уменьшения дублирования кода с помощью комбинации массивов, циклов и дополнительных методов.

Old Dog Programmer 10.02.2023 18:04

Еще дальше Не по теме: Соглашения об именах Java имеют имена переменных, начинающиеся со строчной буквы.

Old Dog Programmer 10.02.2023 18:07

Еще больше не по теме: вы проверяете «слишком холодно»/«слишком тепло» ПОСЛЕ того, как вы уже продали напиток и уменьшили свой счетчик. Вероятно, вам следует изменить порядок этих проверок...

Idle_Mind 10.02.2023 19:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы создаете 3 отдельных экземпляра JuiceStore, каждый со своим счетчиком leftJuices. Когда вы закончите со всеми ними, все их переменные leftJuices будут равны 2.

Если вы хотите разделить переменную между экземплярами, сделайте это static или просто сделайте всего один JuiceStore.

Другие вопросы по теме