在Android上单击按钮时的无限循环

时间:2013-05-17 15:32:25

标签: android android-emulator

我要做的是:

如果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

2 个答案:

答案 0 :(得分:0)

 if(et1.equals(randonNumber))

我将用

更改它
 if(et1.equals(String.valueOf(randonNumber)))

你直接把int值放在equals方法中会发生两件事:

  1. autboxing将从int值
  2. 开始创建一个Integer对象
  3. 将通过此对象调用toString()方法。
  4. android中的toString() Integer方法,正如文档所示:

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

    因此,您要将新对象的地址与et1的内容进行比较,而不是将其与实际值进行比较。 Here参考

答案 1 :(得分:0)

在此行et1.getText().toString();中,您需要将结果分配给变量,例如String input = et1.getText().toString();然后在下一行中您需要比较两个字符串if(input.equals(randonNumber))但是您的程序可以挂起无穷大的原因在UI线程上循环。你应该使用TextWatcher 处理EditText中的文本时更改