我正在制作一个小型的比萨订单应用程序以用于大学作业。在应用程序中,如果用户从单选按钮组中选择“小”,“中”或“大”,则显示的价格将根据给定的信息进行重新计算。但是,由于某种原因,每次显示的价格都不正确。
以下是相关代码:
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启动应用程序,因为这是默认为选中状态的单选按钮。之后,它会随机为每个按钮显示错误的尺寸值:
选择之前:
选择后:
处理添加到比萨中的浇头的其余方法都可以正常工作。但是单选按钮搞砸了。
任何帮助将不胜感激:)
答案 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;
}