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

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

Открыта

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

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

Комментарии (23)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
22 мая 2021, 17:00
if(hasWhippedCream.isChecked()) price += quantity * 1;
if(hasChocolate.isChecked()) price += quantity * 2;
DanTel 22.05.2021
Baxtiyor Android Developer
8 февраля 2021, 21:28
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, 14:34
Тут в комментариях у некоторых увидел довольно элегантное решение сделать условия для Сливок и Шоколада на две строчки:
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, 11:38
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, 14:45
Вижу, здесь, как и у Krypton, используется универсальный способ проверки условий - сразу все 4 сценария проверяются!!! Написал здесь отдельный пост по этому случаю. Вот только вместо длинного ((CheckBox)findViewById(R.id.whipped_cream_checkbox)).isChecked() наверное стоит писать отдельный метод isWhippedCream(), который будет возвращать результат этой длинной строчки =)) Тогда в коде будет чуток легче читаться, хотя я ещё не могу понять, что лучше на самом деле, бо так код становится длиннее из-за бОльшего количества методов - потом немного тяжело по коду ориентироваться из-за кучи методов, разбросанных туда-сюда и это сильно усложняет ориентирование по коду (мы же привыкли к последовательному порядку, которого не всегда получается добиться в коде)
🦔 Викторведу учебный тг-канал в t.me/JavangelionExpert
2 декабря 2020, 09:10
1. Мне в принципе не нравится, что мы нагородили столько избыточных методов и кода в целом. Все опции ведут к подтверждению заказа, там бы я и производил расчёты: сколько всего, какие допы, с представлений вытягивал инфо, имя и вот это вот всё. 2. Я бы в методе createOrderSummary дописал проверки, Если есть допы, то стоимость увеличивается. 3. Всё получится! p.s. Поздравляю с 10 уровнем, финишная прямая, поднажмём!
Anatoliy
Уровень 10
7 июля 2020, 19:50
Какой метод,какой метод....?) Да тут можно три метода модифицировать и результат будет одинаков,главное порядок выполнения программы соблюсти)
Krypton
Уровень 2
24 февраля 2020, 19:37
public String createOrderSummary…
        if (hasWhippedCream) price = price + 1;
        if (hasChocolate) price = price + 2;
Name Unknown ;)
Уровень 2
4 февраля 2021, 14:41
Отличный лаконичный вариант и, к тому же, универсальный - сразу все 4 сценария проверяются!!! Написал здесь отдельный пост по этому случаю. Браво!
Anonymous #1019275
Уровень 15
3 февраля 2020, 15:14
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, 19:46
Зачем эти сложности с ==, можно просто(hasChocolate),если переменная true,то условие будет выполняться.
cepzik
Уровень 3
27 сентября 2019, 13:19
Richard Winter
Уровень 12
3 апреля 2019, 12:11
/** Клик кнопки 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!";
    }