Java: Если оператор для обработки суммы вы хотите, в то время как отбрасывать остальные?

1

У меня есть следующий скрипт:

public void addcheese(int addcheese) {
    if (cheeseamount + addcheese < mincapacity) {
        System.out.println("Sorry no more cheese can be removed.");
    } else if (cheeseamount + addcheese <= maxcapacity) {
        if ((cheeseamount + addcheese > 1900) && (cheeseamount + addcheese < 2000)) {
            System.out.println("Warning : The box is nearing it maximum capacity.");
        }
        cheeseamount = cheeseamount + addcheese;
    }
    else {
        System.out.println("This storage box has reached its maximum capacity. You cannot fill it any more");
    }
}

(Примечание: в макспроизводстве конструктора = 2000)

Скрипт работает так, как должен, однако есть проблема в том, что если бы я должен был ввести число, подобное 3400, оно все равно напечатало бы сообщение "Это хранилище достигло максимума...", не добавляя ничего. Как бы отредактировать сценарий, в этом случае добавьте в поле вверх до максимальной емкости и отбросьте лишнюю сумму. Спасибо.

  • 0
    Ваш интервал нечетный по частям, что затрудняет анализ. Это может быть принятым стилем; Я просто никогда не видел это раньше.
  • 1
    Я не понимаю, что вы хотите. Но если вы заполните коробку до максимальной вместимости и cheeseamount от избытка, что будет с cheeseamount ? Это очень простой ответ, если я правильно понимаю проблему. Вы должны просто иметь возможность использовать простое назначение внутри последнего блока else .
Показать ещё 4 комментария
Теги:
if-statement
storage

3 ответа

2

Вот решение:

public void addcheese(int addcheese) 
{
    final int target = cheeseamount + addcheese;

    if (target < mincapacity) {
        System.out.println("Sorry, no cheese can be removed");
        return;
    }

    if (target >= maxcapacity) {
        cheeseamount = maxcapacity;
        System.out.println("Box is full");
        return;
    }

    cheeseamount = target;
    if (cheeseamount > 1900)
        System.out.println("Warning, box is nearing its maximum capacity");
}

Заметки:

  • оставил упражнение читателю: предупредите о количестве сыра впустую!
  • соглашения об именах: Java использует camelCase; предпочтительнее это должны быть addCheese, cheeseAmount и т.д.
0

Один из способов добиться этого - это изменить ваше выражение else. В заявлении else вы можете просто установить количество сыра до максимального количества, добавляя как можно больше сыра и отбрасывая остальное:

else {
            cheeseamount = 2000;
            System.out.println("This storage box has now reached its maximum capacity.");

       }

Однако здесь вы теряете количество сыра, которое вы отбрасываете. Если вы хотите сохранить этот номер, вы можете просто создать новую переменную:

else {
            int extraCheese = cheeseamount + addcheese - 2000;
            cheeseamount = 2000;
            System.out.println("This storage box has now reached its maximum capacity.");

       }

Замечание: было бы неплохо сохранить максимальную емкость и любые другие магические числа в качестве констант. Магические числа - это в основном случайные числа, которые появляются во всем вашем коде, что любой, кто смотрит на ваш код, не имеет смысла. Создавая константу с описательным именем, вы можете дать понять другим программистам, что представляет собой число, и вы также можете легко изменить его в будущем.

0

Добавьте другое, если еще с этим условием:

else if (cheeseamount != maxcapacity && cheeseamount + addcheese > maxcapacity) {
    cheeseamount = maxcapacity;
    System.out.println("Warning : The box just reached it maximum capacity.");
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню