我正在构建一个可以计算BMI并分析结果的应用程序,因此我在应用程序中添加了一个switch-case,以帮助它根据结果提供建议。我在文本视图中显示了BMI结果,我已将其设为隐形,但我不断收到操作员'<'在开关的情况< 15和case> 40区域中不能应用错误。我想这是由于textview中的字符串值,我该如何解决这个问题?
public class MainActivity extends Activity{
public final static String EXTRa_MESSAGE = " com.blogspot.bosolutionsonline.bosolutionsbmi.MESSAGE";
EditText edit_height;
EditText edit_weight;
TextView ans;
TextView ans2;
int an2;
Button bmi;
double x=0;
double y=0;
double z=0;
/**called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initControls();
}
private void initControls()
{
edit_height=(EditText)findViewById(R.id.edit_height);
edit_weight=(EditText)findViewById(R.id.edit_weight);
ans=(TextView)findViewById(R.id.ans);
bmi=(Button)findViewById(R.id.bmi);
bmi.setOnClickListener(new Button.OnClickListener() {
public void onClick
(View v) {
bmi();
}
});
}
private void bmi(){
x=Double.parseDouble(edit_height.getText().toString());
y=Double.parseDouble(edit_weight.getText().toString());
z=y/(x*x);
ans.setText(Double.toString(z));
ans.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case ans < 15:
setContentView(R.layout.xml1);
break;
case 15:
case 16:
setContentView(R.layout.xml2);
break;
case 17:
case 18:
setContentView(R.layout.xml3);
break;
case 19:
case 20:
case 21:
case 22:
case 23:
case 24:
case 25:
setContentView(R.layout.xml4);
break;
case 26:
case 27:
case 28:
case 29:
case 30:
setContentView(R.layout.xml5);
break;
case 31:
case 32:
case 33:
case 34:
case 35:
setContentView(R.layout.xml6);
break;
case 36:
case 37:
case 38:
case 39:
case 40:
setContentView(R.layout.xml7);
break;
case ans > 40:
setContentView(R.layout.xml8);
break;
}
}
});
}
}
答案 0 :(得分:4)
您的交换机案例正在测试v.getId()
值,因此case ans < 15
因为以下几个原因而无意义:
v.getId()
进行测试,因为这是您基于的切换值。ans
不是int
一种可能的解决方案是将条件移至默认子句:
switch (v.getId()){
case 15:
case 16:
...
case 40:
...
default:
if (v.getId() < 15)
setContentView(R.layout.xml1)
else if (v.getId() > 40)
setContentView(R.layout.xml8);
break;
}
我不确定在这个switch语句中应该如何使用ans
的值,如果有的话。也许您打算启用从int
而不是ans
解析的某些v.getId()
值。
答案 1 :(得分:0)
如果您想要这样的话,请尝试在default
语句中添加switch
个案,然后添加if else
语句,如下所示:
default:
if(v.getId()<15){
setContentView(R.layout.xml1);
}else if(v.getId()>40){
setContentView(R.layout.xml8);
}
break;