【问题标题】:EditText Integer ComparingEditText 整数比较
【发布时间】:2012-08-16 00:42:00
【问题描述】:

比较来自 EditText 的输入整数时遇到问题。我找不到它有什么问题。请帮我。这是下面的代码。

    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.problem2);
        textIn = (EditText) findViewById(R.id.probText);
        Button ans3 = (Button) findViewById(R.id.answer3);



        ans3.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                String probString = textIn.getText().toString();
                Integer probInt = Integer.parseInt(probString);
                Integer prob = 31;
                if (probInt.equals(prob)) {
                    Toast toast = Toast.makeText(answer3.this,"CORRECT!",Toast.LENGTH_SHORT);
                    toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
                    toast.show();
                    startActivity(new Intent("com.sample.androidsample.ANSWER4")    );

                } else {
                    Toast toast = Toast.makeText(answer3.this,"Wrong answer! Try again.",Toast.LENGTH_SHORT);
                    toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
                    toast.show();
                }
            }
        });
}

【问题讨论】:

  • 你试过了吗(probInt == prob)?
  • 你能把 Log.i("@@@", probString);在 String probString = textIn.getText().toString() 之后;并检查 logcat 中的输出是什么?
  • 试过 (probInt == prob) 它总是返回 else 语句
  • 始终清理您的输入,首先使用Pattern 清除错误输入,然后知道模式匹配,然后可以安全地将其解析为Integer .
  • 尝试修剪它。 String probString = textIn.getText().toString().trim();

标签: android integer android-edittext compare


【解决方案1】:

试试这个:

Integer probInt = Integer.parseInt(probString);
            Integer prob = 31;
            //changed from equals() to ==
            if (probInt == prob)) {
                Toast toast = Toast.makeText(answer3.this,"CORRECT!",Toast.LENGTH_SHORT);
                toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
                toast.show();
                startActivity(new Intent("com.sample.androidsample.ANSWER4")    );

            } else {
                Toast toast = Toast.makeText(answer3.this,"Wrong answer! Try again.",Toast.LENGTH_SHORT);
                toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
                toast.show();
            }

据我了解,equals 用于字符串。

【讨论】:

    【解决方案2】:

    您可以使用Integer probInt = Integer.valueOf(probString); 而不是Integer probInt = Integer.parseInt(probString);,但我不确定这是不是问题所在。你也可以使用probInt.equalIgnoreCase(prob),而不是probInt.equals(prob)

    【讨论】:

    • 已经试过了。还是一样的问题。我想知道为什么它不比较正确..
    • 我觉得你需要看看logcat中probInt的内容是什么。
    【解决方案3】:

    我认为这是错误的行。

    Integer prob = 31;
    

    这里的 Integer 是一个类,所以你必须像下面这样实例化它。

    Integer prob = new Integer(31);
    

    或 你可以使用

    int prob =31;
    

    【讨论】:

      【解决方案4】:

      而不是

       Integer probInt = Integer.parseInt(probString);
       Integer prob = 31;
       if (probInt.equals(prob)) {
       } else {
       }
      

      使用

      int probInt = (int) Integer.parseInt(probString);
      int prob = 31;
      if (probInt == prob) {
      } else {
      }
      

      【讨论】:

        【解决方案5】:

        这是一个清理输入的示例。为简洁起见,省略了异常处理。

        private Pattern patternNum = Pattern.compile("^(\\d{1,5})$", 
                                       Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
        
        // Wrap it in a try/catch for PatternSyntaxException!
        private boolean validateNum(String inputNum){
            return patternNum.matcher(inputNum);
        }
        

        然后假设 validateNum 例程返回 true,这意味着它匹配至少 5 个数字,然后这样说:

        if (validateNum(probString)){
           int probInt = Integer.parseInt(probString);
           if (probInt == prob){
              // Success
           }else{
              // Failure
           }
        }else{
           // Whoops! Bad input caught!
        }
        

        【讨论】:

        • 已经试过了。输入正确但比较不匹配。总是返回失败
        • @marcc abaya:什么失败了?更具体?
        【解决方案6】:

        试试这个,它会起作用的

        Integer probInt = Integer.parseInt(probString);
                Integer prob = 31;
                //changed from equals() to ==
                if (probInt.intValue() == prob.intValue()) {
                    Toast toast = Toast.makeText(answer3.this,"CORRECT!",Toast.LENGTH_SHORT);
                    toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
                    toast.show();
                    startActivity(new Intent("com.sample.androidsample.ANSWER4")    );
        
                } else {
                    Toast toast = Toast.makeText(answer3.this,"Wrong answer! Try again.",Toast.LENGTH_SHORT);
                    toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
                    toast.show();
                }
        

        【讨论】:

        • 是的,现在试试,我错过了)