JavaRush /Курсы /Курс "Программирование под Андроид" /Пересмотр цены с учётом топпингов

Пересмотр цены с учётом топпингов

Курс "Программирование под Андроид"
10 уровень , 0 лекция
Открыта

Ниже ссылки на код конструкции если / иначе из тех упражнений, что Вы уже сделали, — они помогут Вам пройти этот тест:

Свои ответы и вопросы можете оставлять в комментариях.

Комментарии (23)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
22 мая 2021

if(hasWhippedCream.isChecked()) price += quantity * 1;
if(hasChocolate.isChecked()) price += quantity * 2;
DanTel 22.05.2021
Baxtiyor Уровень 1
8 февраля 2021

        price = quant * 5 ;
        if (quant==0){
            if(check1)
                price+=1;
            if (check2)
                price+=2;
        }
        else {
            if(check1)
                price+=quant;
            if (check2)
                price+=quant*2;
        }
Name Unknown ;) Уровень 2
4 февраля 2021
Тут в комментариях у некоторых увидел довольно элегантное решение сделать условия для Сливок и Шоколада на две строчки:

if (hasWhippedCream) finalPrice = finalPrice + (quantity * priceOfWhippedCream);
if (hasChocolate) finalPrice= finalPrice + (quantity * priceOfChocolate);

return finalPrice;
Новичкам может показаться, что чего-то не хватает (привыкли к if - else). Всё нормально, если есть сливки (true) - посчитает, если нет сливок - не посчитает (false) и перейдёт к проверке шоколада по такому же алгоритму проверки/подсчёта. Таким образом алгоритм работает сразу для всех ЧЕТЫРЁХ сценариев выбора: 0) ничего не выбрали 1) выбрали всё 2) выбрали только сливки 3) выбрали только шоколад Ну и по поводу фигурных скобок тоже можно не беспокоиться - если всё сделано в одну или две строчки, то код будет работать.

//можно так
if (hasWhippedCream) finalPrice = finalPrice + (quantity * priceOfWhippedCream);
//и так
if (hasWhippedCream)
     finalPrice = finalPrice + (quantity * priceOfWhippedCream);
Fatum Уровень 1
31 января 2021

private String createOrderSummary(int price) {
       if (((CheckBox)findViewById(R.id.whipped_cream_checkbox)).isChecked()) {
           price += (whippedCreamPrice * numberOfCoffees);
       }

       if (((CheckBox) findViewById(R.id.chocolate_topping_checkbox)).isChecked()) {
           price += (chocolatePrice * numberOfCoffees);
       }

        return "Name: " + ((EditText)findViewById(R.id.editTextTextPersonName)).getText()
                + "\n" + "Add whipped cream? " + ((CheckBox)findViewById(R.id.whipped_cream_checkbox)).isChecked()
                + "\n" + "Add chocolate topping? " + ((CheckBox) findViewById(R.id.chocolate_topping_checkbox)).isChecked()
                + "\n" + "Total Item Count: " + numberOfCoffees + " coffees"
                + "\n" + "Price: " + "$" + price
                + "\n" + "Thank you!";
    }

Name Unknown ;) Уровень 2
4 февраля 2021
Вижу, здесь, как и у Krypton, используется универсальный способ проверки условий - сразу все 4 сценария проверяются!!! Написал здесь отдельный пост по этому случаю. Вот только вместо длинного ((CheckBox)findViewById(R.id.whipped_cream_checkbox)).isChecked() наверное стоит писать отдельный метод isWhippedCream(), который будет возвращать результат этой длинной строчки =)) Тогда в коде будет чуток легче читаться, хотя я ещё не могу понять, что лучше на самом деле, бо так код становится длиннее из-за бОльшего количества методов - потом немного тяжело по коду ориентироваться из-за кучи методов, разбросанных туда-сюда и это сильно усложняет ориентирование по коду (мы же привыкли к последовательному порядку, которого не всегда получается добиться в коде)
🦔 Виктор Уровень 20 Expert
2 декабря 2020
1. Мне в принципе не нравится, что мы нагородили столько избыточных методов и кода в целом. Все опции ведут к подтверждению заказа, там бы я и производил расчёты: сколько всего, какие допы, с представлений вытягивал инфо, имя и вот это вот всё. 2. Я бы в методе createOrderSummary дописал проверки, Если есть допы, то стоимость увеличивается. 3. Всё получится! p.s. Поздравляю с 10 уровнем, финишная прямая, поднажмём!
Anatoliy Уровень 10
7 июля 2020
Какой метод,какой метод....?) Да тут можно три метода модифицировать и результат будет одинаков,главное порядок выполнения программы соблюсти)
Krypton Уровень 2
24 февраля 2020

public String createOrderSummary…
        if (hasWhippedCream) price = price + 1;
        if (hasChocolate) price = price + 2;
Name Unknown ;) Уровень 2
4 февраля 2021
Отличный лаконичный вариант и, к тому же, универсальный - сразу все 4 сценария проверяются!!! Написал здесь отдельный пост по этому случаю. Браво!
Anonymous #1019275 Уровень 15
3 февраля 2020
private int calculatePrice(boolean hasWhippedCream, boolean hasChocolate) { int price = 5; if (hasChocolate == true) { price += 2; } if (hasWhippedCream == true) { price += 1; } return numbersOfCoffees * price; }
Anatoliy Уровень 10
7 июля 2020
Зачем эти сложности с ==, можно просто(hasChocolate),если переменная true,то условие будет выполняться.
cepzik Уровень 3
27 сентября 2019
Richard Winter Уровень 12
3 апреля 2019

/** Клик кнопки ORDER */
    public void submitOrder(View view) {

        CheckBox whippedCreamCheckBox = (CheckBox) findViewById(R.id.whipped_cream_checkbox);
        boolean hasWhippedCream = whippedCreamCheckBox.isChecked();

        CheckBox chocolateCheckBox = (CheckBox) findViewById(R.id.chocolate_cream_checkbox);
        boolean hasChocolate = chocolateCheckBox.isChecked();

        /** EditText */
        EditText nameEditText = (EditText)findViewById(R.id.name_edit_text);
        Editable nameEditable = nameEditText.getText();
        String name = nameEditable.toString();

        /** Конечная цена */
        price = calculatePrice(quantity, priceOfCup, hasWhippedCream, hasChocolate);

        /** Сообщение */
        String message = createOrderSummary(name, price, hasWhippedCream, hasChocolate);
        displayMessage(message);
    }

    /** Считаем конечную цену заказа */
    private int calculatePrice(int quantity, int priceOfCup, boolean isWhippedCream, boolean isChocolate){
        int finalPrice = priceOfCup * quantity;

        if (isWhippedCream) {
            finalPrice = finalPrice + (quantity * priceOfWhippedCream);
        }

        if (isChocolate){
                finalPrice = finalPrice + (quantity * priceOfChocolate);
        }

        return finalPrice;
    }


    public String createOrderSummary (String name, int price, boolean addWhippedCream, boolean addChocolate){

        return "Name: " + name + "\n" +
                "Add Whippped Cream: " + addWhippedCream + "\n" +
                "Add Chocolate: " + addChocolate + "\n" +
                "Quantity: " + quantity + "\n" +
                "Total: " + price + "\n" +
                "Thank You!";
    }