2013-05-17 22 views
0

То, что я пытаюсь сделать, это:Бесконечный цикл при нажатии кнопки на Android

Если вход EditText равен случайным число генерируемого, то остановить цикл иначе держать на петле и сброс ввод текста.

По какой-то причине я получаю бесконечный цикл. Я новичок в программировании, любая помощь очень ценится.

Вот код:

public class Main extends Activity implements OnClickListener{ 

private TextView tvResult; 
private TextView tvRandTest; 
private EditText et1; 
private String randonNumber; 

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

    tvResult = (TextView) findViewById(R.id.textView4); 
    tvRandTest = (TextView) findViewById(R.id.textView3); 

    et1 = (EditText) findViewById(R.id.editText1); 
}//End Main 

public void myClickHandler(View view) 
{    
    if(view.getId() == R.id.button1) 
    {         
     //Generates 6 one digit Random Numbers 
     int randonNumber1 = (int) (0 + Math.random() * 9); 

     //Parse Numbers    
     String rd1 = Integer.toString(randonNumber1); 

     randonNumber = rd1; 

    boolean done = false;  
    do   
     { 

     et1.getText().toString(); 
     if(et1.equals(randonNumber)) 
     { 
      Toast.makeText(Main.this,"Equal Number", Toast.LENGTH_SHORT).show(); 
      tvResult.setText(randonNumber); 
      done = true; 
     }//end if 
     else 
     { 
      Toast.makeText(Main.this,"Not Equal Number", Toast.LENGTH_SHORT).show(); 

      et1.setText(""); 

     }//end else 

     }//End While 
    while(!done); 

    }//End if 


    if(view.getId() == R.id.button2) 

     { 

      tvRandTest.setText(randonNumber); 
     } 


}//End Method 

@Override 
public void onClick(View arg0) { 
    // TODO 
} 
}//End Class 

ответ

0
if(et1.equals(randonNumber)) 

я изменю его

if(et1.equals(String.valueOf(randonNumber))) 

вы поставите непосредственно значение INT внутри метода Equals произойдут две вещи:

  1. autboxing будет создавать объект Integer, начиная с int значение
  2. Метод toString() будет вызван через этот объект.

toString() метод Integer в андроиде, так как документ стоит:

Returns a string containing a concise, human-readable description of this object. 

Так вы compareing адреса нового объекта с содержанием et1 и не с его реальной стоимостью. Here ссылка

0

В этой строке et1.getText().toString(); вам нужно присвоить результат переменной, например String input = et1.getText().toString(); Затем в следующей строке нужно сравнить две строки, if(input.equals(randonNumber)) Но ваша программа может повесить причину петли бесконечности на UI потоке. Вы должны использовать TextWatcher для обработки, если текст в EditText был изменен

Смежные вопросы