Android Java方法无法正确计算

时间:2018-10-16 04:42:35

标签: java android radio-button

我正在制作一个小型的比萨订单应用程序以用于大学作业。在应用程序中,如果用户从单选按钮组中选择“小”,“中”或“大”,则显示的价格将根据给定的信息进行重新计算。但是,由于某种原因,每次显示的价格都不正确。

以下是相关代码:

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;
    }

}

请注意,在MainActivity.java的onCreate()方法中调用了Init()方法。

sizeStatus是MainActivity中声明的变量,默认设置为“ Small”(字符串)(与初始RadioButton检查相同)。

它以正确的值$ 9启动应用程序,因为这是默认为选中状态的单选按钮。之后,它会随机为每个按钮显示错误的尺寸值:

选择之前:

http://prntscr.com/l6ke08

选择后:

http://prntscr.com/l6ke6h

处理添加到比萨中的浇头的其余方法都可以正常工作。但是单选按钮搞砸了。

任何帮助将不胜感激:)

4 个答案:

答案 0 :(得分:1)

使用以下字符串比较字符串:“ string1.equals(String target)” 检查以下链接: if statement comparing strings in java android

答案 1 :(得分:0)

首先,我认为出错的是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;
    }

}

答案 2 :(得分:0)

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();
        }
    });

答案 3 :(得分:0)

使用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;
  }