2016-06-15 12 views
-2

У меня есть 2 текстовых поля, 1 editbox и 1 кнопка в моем xml.равная функция не работает в моем java-коде

в моем коде эта линия не работает:

if(c.equals(str)){ 
       Toast.makeText(GameActivity.this, "Alright",Toast.LENGTH_LONG).show(); 
      } 

но следующая строка (еще) работает и в обоих случаях (если & еще) показать еще функцию тост («Неправильный»).

мой код это:

public class GameActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.game); 

    Button b1 = (Button) findViewById(R.id.button1); 
    b1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      TextView tv = (TextView) findViewById(R.id.textView1); 
      TextView tv2 = (TextView) findViewById(R.id.textView2); 
      Random r = new Random(); 
      int i = r.nextInt(10 - 2) + 2; 
      tv.setText(i +""); 
      Random r1 = new Random(); 
      int j = r1.nextInt((9 - 2) + 1) + 2; 
      tv2.setText(j +""); 

      int a = Integer.parseInt(tv.getText().toString()); 
      int b = Integer.parseInt(tv2.getText().toString()); 
      int result = a*b; 
      String str = String.valueOf(result); 

      EditText txt4 = (EditText) findViewById(R.id.editText1); 
      String c = txt4.getText().toString(); 

      if(TextUtils.isEmpty(txt4.getText().toString())) { 
       txt4.setError("Please enter your answer"); 
       return; 
      } 

      if(c.equals(str)){ 
       Toast.makeText(GameActivity.this, "Alright",Toast.LENGTH_LONG).show(); 

      } 

      else{ 
       Toast.makeText(GameActivity.this, "wrong",Toast.LENGTH_LONG).show(); 
      } 

      txt4.setText(""); 
     } 

    }); 
    } 
+0

Так что 'c.equals (str)' возвращает false, когда вы ожидаете true? Вы отлаживали и проверяли значения для 'c' и' str' на самом деле были равны? В случае, если условие действительно выполнено, вы проверили 'Toast.makeText (...)' делает правильную вещь и не имеет в ней каких-то жестко закодированных значений? – Thomas

+0

Запустите 'Log.e ('testing equal', c +": "+ str)' перед 'if' и опубликуйте результаты журнала. Он должен показать что-то вроде 'String1: StringYouThinkIsString1' –

+0

' str' похоже, фактически содержит число, вы пытались разобрать ввод пользователя на номер (проверьте, был ли введен номер сначала, например, с простым регулярным выражением) и вместо этого сравнивайте числа строк? – Thomas

ответ

1

Попробуйте это, я получил результат

public class Test extends AppCompatActivity { 
Button b1; 
TextView t1,t2; 
EditText e1; 
int a,b; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test); 
    b1 = (Button) findViewById(R.id.button2); 
    t1=(TextView) findViewById(R.id.textView4); 
    t2=(TextView) findViewById(R.id.textView5); 
    e1=(EditText) findViewById(R.id.editText); 
    Random r = new Random(); 
    int i = r.nextInt(10 - 2) + 2; 
    t1.setText(i +""); 
    Random r1 = new Random(); 
    int j = r1.nextInt((9 - 2) + 1) + 2; 
    t2.setText(j +""); 

    a = Integer.parseInt(t1.getText().toString()); 
    b = Integer.parseInt(t2.getText().toString()); 

    b1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      int result = a*b; 
      String str = String.valueOf(result); 

      String c = e1.getText().toString(); 

      if(TextUtils.isEmpty(c)) { 
       e1.setError("Please enter your answer"); 
       return; 
      } 

      if(c.equals(str)){ 
       Toast.makeText(Test.this, "Alright",Toast.LENGTH_LONG).show(); 

      } 

      else{ 
       Toast.makeText(Test.this, "wrong",Toast.LENGTH_LONG).show(); 
      } 

      e1.setText(""); 
     } 

    }); 
}} 
+0

Во-первых, я был бы признателен не просто сбрасывать код на OP, а объяснять, что вы изменили и почему. В конце концов, он здесь, чтобы узнать кое-что. Во-вторых, все еще есть недостаток: после ввода правильного ответа вы, вероятно, захотите обновить 'a' и' b' (btw нет необходимости делать вычисления на каждый клик). – Thomas

+0

Если этот комментарий ссылается на ваш ответ, вы должны добавить его туда, иначе может быть сложно сделать соединение, особенно если позже вы увидите этот поток и не прочитаете все комментарии. – Thomas

+0

@ DixitPanchal спасибо Диксит. ваш код работает очень хорошо. но я хочу использовать случайное число. Каково ваше предложение? – MonaK

1

Вместо

String str = String.valueOf(result); 

вы должны использовать

String str = Integer.toString(result); 
+1

Это не имеет значения, поскольку 'String.valueOf (int)' реализуется как 'return Integer.toString (i);'. – Thomas