我正在研究一个Android初学者的教程,这是一个小费计算器。它运行正常,但我想知道如何用switch语句替换else-if语句。并不是说它对于这个程序来说非常重要,但我只是试图围绕语法进行思考。
package com.android.tipcalc;
import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Button;
import android.widget.RadioButton;
import android.view.View;
public class tipcalc extends Activity
{
private EditText txtbillamount;
private EditText txtpeople;
private RadioGroup radiopercentage;
private RadioButton radio15;
private RadioButton radio18;
private RadioButton radio20;
private TextView txtperperson;
private TextView txttipamount;
private TextView txttotal;
private Button btncalculate;
private Button btnreset;
private double billamount = 0;
private double percentage = 0;
private double numofpeople = 0;
private double tipamount = 0;
private double totaltopay = 0;
private double perperson = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initControls();
}
private void initControls()
{
txtbillamount = (EditText)findViewById(R.id.txtbillamount);
txtpeople = (EditText)findViewById(R.id.txtpeople);
radiopercentage = (RadioGroup)findViewById(R.id.radiopercentage);
radio15 = (RadioButton)findViewById(R.id.radio15);
radio18 = (RadioButton)findViewById(R.id.radio18);
radio20 = (RadioButton)findViewById(R.id.radio20);
txttipamount=(TextView)findViewById(R.id.txttipamount);
txttotal=(TextView)findViewById(R.id.txttotal);
txtperperson=(TextView)findViewById(R.id.txtperperson);
btncalculate = (Button)findViewById(R.id.btncalculate);
btnreset = (Button)findViewById(R.id.btnreset);
btncalculate.setOnClickListener(new Button.OnClickListener() {
public void onClick (View v){ calculate(); }});
btnreset.setOnClickListener(new Button.OnClickListener() {
public void onClick (View v){ reset(); }});
}
private void calculate()
{
billamount=Double.parseDouble(txtbillamount.getText().toString());
numofpeople=Double.parseDouble(txtpeople.getText().toString());
if (radio15.isChecked()) {
percentage = 15.00;
} else if (radio18.isChecked()) {
percentage = 18.00;
} else if (radio20.isChecked()) {
percentage = 20.00;
}
tipamount=(billamount*percentage)/100;
totaltopay=billamount+tipamount;
perperson=totaltopay/numofpeople;
txttipamount.setText(Double.toString(tipamount));
txttotal.setText(Double.toString(totaltopay));
txtperperson.setText(Double.toString(perperson));
}
private void reset()
{
txtbillamount.setText("");
txtpeople.setText("");
radiopercentage.clearCheck();
radiopercentage.check(R.id.radio15);
txttipamount.setText("...");
txttotal.setText("...");
txtperperson.setText("...");
}
}
答案 0 :(得分:5)
我上面的人说的是正确的,但是为了使用切换语句,你可以在你的OnCheckedChangedListener
上设置RadioGroup
,然后使用这样的类:
private class MyCheckedChangedListener implements OnCheckedChangeListener {
@Override
public void onCheckedChanged( RadioGroup group, int checkedId ) {
switch (checkedId) {
case R.id.radio15:
percentage = 15f;
break;
case R.id.radio18:
percentage = 18f;
break;
case R.id.radio20:
percentage = 20f;
break;
}
}
}
答案 1 :(得分:1)
switch
用于一个变量 - 即您有x
,可以等于3,5或7.然后您switch x
并提供几个案例 - 如何处理每个变量可能的值(当没有给定的值匹配时,您也可以使用默认情况)。在您的情况下,您正在检查几个不同的变量,因此if ... else if ... else
是正确的方法。当然,您可以将单选框设置为共享变量,然后可以switch
。
答案 2 :(得分:0)
如果你在谈论calculate()
中的if-else语句,你不能直接用switch语句替换它。 switch语句中的case值需要是编译时常量(整数或枚举值)。此外,if-else在这里完美地表达了你想要做的事情的逻辑。
你可以基于radio15,radio18和radio20的状态计算“切换测试值”(例如,基于八种可能的值组合,从0到8的整数)和切换,但我强烈建议不要这样做。它不仅会不必要地复杂化和模糊正在发生的事情的逻辑,如果你在忘记这个聪明的伎俩之后六个月需要维护代码,你就会诅咒自己。