运营商'<'无法应用于android.widget.textview int

时间:2015-08-12 07:16:16

标签: java android if-statement

我正在构建一个可以计算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;

            }
        }
    });

    }

 }

2 个答案:

答案 0 :(得分:4)

您的交换机案例正在测试v.getId()值,因此case ans < 15因为以下几个原因而无意义:

  1. 您应该对v.getId()进行测试,因为这是您基于的切换值。
  2. 您不能在案例子句中使用比较运算符,只能使用单个值。
  3. ans不是int
  4. 一种可能的解决方案是将条件移至默认子句:

            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;