Android Java метод не рассчитывается правильно - PullRequest
0 голосов
/ 16 октября 2018

Я делаю маленькое приложение для заказа пиццы для колледжа.В приложении, если пользователь выбирает «маленький», «средний» или «большой» из группы радиокнопок, показанная цена будет пересчитана с учетом предоставленной информации.Однако по какой-то причине цена, указанная после каждого времени, неверна.

Вот соответствующий код:

MainActivity.java

private void Init(){
        onCalculate();

        switchToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (switchToggle.isChecked()){
                    switchToggle.setText("Yes");
                }
                else {
                    switchToggle.setText("No");
                }
            }
        });

        smallRadioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                sizeStatus = "Small";
                onCalculate();
            }
        });
        mediumRadioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                sizeStatus = "Medium";
                onCalculate();
            }
        });
        largeRadioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                sizeStatus = "Large";
                onCalculate();
            }
        });
        meatCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                onCalculate();
            }
        });
        cheeseCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                onCalculate();
            }
        });
        veggiesCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                onCalculate();
            }
        });

    }


    private void onCalculate(){
        resultTextView.setText("$" + Integer.toString(Order.CalculatePrice(sizeStatus, meatCheckBox.isChecked(), cheeseCheckBox.isChecked(), veggiesCheckBox.isChecked())));
    }

Order.java

public final class Order {

    public static int CalculatePrice(String size, boolean meat, boolean cheese, boolean veggies){
        int price = 0;

        if (size == "Small"){
            price += 9;
        }
        else if (size == "Medium"){
            price += 10;
        }
        else if (size == "Large"){
            price += 11;
        }
        if (meat == true){
            price += 2;
        }
        if (cheese == true){
            price += 2;
        }
        if (veggies == true){
            price += 2;
        }

        return price;
    }

}

Обратите внимание, что метод Init () вызывается в методе onCreate () в MainActivity.java.

sizeStatus - объявленная переменнаяв MainActivity и имеет значение «Small» (строка) по умолчанию (аналогично начальной проверке RadioButton).

Приложение запускается с правильным значением $ 9, поскольку это радио-кнопка по умолчанию установлена ​​как проверенная.После этого он отображает неправильные значения размера для каждой кнопки случайным образом:

До выбора:

http://prntscr.com/l6ke08

После выбора:

http://prntscr.com/l6ke6h

Остальная часть метода обработки добавок, добавляемых в пиццу, работает нормально.Но радио кнопки не работают.

Любая помощь будет оценена :))

Ответы [ 4 ]

0 голосов
/ 16 октября 2018

сравнивает строки, используя: "string1.equals (String target)" проверьте ссылку ниже: если оператор сравнивает строки в java android

0 голосов
/ 16 октября 2018

SetOnCheckedChangedListener вызывает функцию при изменении статуса проверки.Таким образом, функция onCheckedChanged вызывается, даже если переключатель не установлен.

Итак, если вы хотите изменить SavedStatus, вы можете использовать isChecked параметры или попробовать это.

radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, int i) {
            switch (radioGroup.getCheckedRadioButtonId()) {
                case R.id.small_radio_button:
                    sizeStatus = "Small";
                    break;
                case R.id.medium_radio_button:
                    sizeStatus = "Medium";
                    break;
                case R.id.large_radio_button:
                    sizeStatus = "Large";
            }
            onCalculate();
        }
    });
0 голосов
/ 16 октября 2018

Используйте метод Equals для сравнения String и используйте метод equalsIgnoreCase для сложности случая.

public static int CalculatePrice(String size, boolean meat, boolean cheese, boolean veggies){
    int price = 0;

    if (size.equalsIgnoreCase("Small")){ 
      price += 9;
    }
    else if (size.equalsIgnoreCase("Medium")){
      price += 10;
    }
    else if (size.equalsIgnoreCase("Large")){
      price += 11;
    }
    if (meat){
      price += 2;
    }
    if (cheese){
      price += 2;
    }
    if (veggies){
      price += 2;
    }

    return price;
  }
0 голосов
/ 16 октября 2018

На первый взгляд, мне кажется, что неправильно получается метод equals(), который не используется для сравнения строк в вашем методе calculatePrice().

Вы должны использовать код, подобный следующему:

public final class Order {

    public static int CalculatePrice(String size, boolean meat, boolean cheese, boolean veggies){
        int price = 0;

        if (size.equals("Small")){
            price += 9;
        }
        else if (size.equals("Medium")){
            price += 10;
        }
        else if (size.equals("Large")){
            price += 11;
        }
        if (meat == true){
            price += 2;
        }
        if (cheese == true){
            price += 2;
        }
        if (veggies == true){
            price += 2;
        }

        return price;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...