2012-08-16 83 views
0

从EditText比较输入整数时遇到问题。我无法找到它有什么问题。请帮帮我。这是下面的代码。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(); 
       } 
      } 
     }); 
} 
+0

您是否尝试过(probInt ==概率)? – 2012-08-16 00:48:33

+0

可以哟把Log.i(“@@@”,probString);在字符串之后probString = textIn.getText()。toString();并检查logcat中的输出是什么? – Hesam 2012-08-16 00:49:41

+0

try(probInt == prob)它总是返回else语句 – 2012-08-16 00:51:50

回答

0

相反的Integer probInt = Integer.parseInt(probString);可以使用Integer probInt = Integer.valueOf(probString);,但我不知道这就是问题所在。而不是probInt.equals(prob),您可以使用probInt.equalIgnoreCase(prob)

+0

已经试过了。仍是同样的问题。即时通讯想知道为什么它不比较正确.. – 2012-08-16 00:54:37

+0

我想你需要看看logcat中probInt的内容是什么。 – Hesam 2012-08-16 00:56:12

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是字符串。

0

我认为这是错误的路线。

Integer prob = 31; 

这里Integer是一个类,所以你将不得不像下面那样实例化它。

Integer prob = new Integer(31); 

或 你可以只使用

int prob =31; 
0

,而不是

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 { 
} 
0

尝试这个东西,它会工作

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(); 
     } 
+1

同样的结果。返回错误的语法 – 2012-08-16 01:47:04

+0

if(probInt.intValue()== prob.intValue())){... – Art 2012-08-16 02:08:36

+0

是的,现在试试吧,我错过了一个) – Art 2012-08-16 02:19:35

0

下面是一个消毒输入的例子。为简洁起见省略了异常处理。

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! 
} 
+0

已经试过了。输入正确但不匹配的比较。总是返回失败 – 2012-08-16 01:46:36

+0

@marcc abaya:失败在哪?更加详细一些? – t0mm13b 2012-08-16 12:24:09