Java DoWhile、Handler和runnable-Android

Java DoWhile、Handler和runnable-Android,java,android,handler,runnable,do-while,Java,Android,Handler,Runnable,Do While,我一辈子都不能在按钮点击时运行这个do-while循环,即使有一个runnable and处理程序。谁能告诉我哪里出了错 {//Class start Button roll; int numberOfDice; int diceCounter; EditText diceBox; EditText outputBox; String diceNum; Handler myHandler = new Handler(); priv

我一辈子都不能在按钮点击时运行这个do-while循环,即使有一个runnable and处理程序。谁能告诉我哪里出了错

{//Class start

    Button roll;
    int numberOfDice;
    int diceCounter;
    EditText diceBox;
    EditText outputBox;
    String diceNum;
    Handler myHandler = new Handler();
    private boolean Running;


    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_roller_screen);
        roll = (Button) findViewById(R.id.roll_Button);
        diceBox = (EditText) findViewById(R.id.numberOfDiceBox);
        outputBox = (EditText) findViewById(R.id.outputBox);

        roll.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) 
            {
                myHandler.post(runner);
            }

        });


    }


    Runnable runner = new Runnable() {

        int dicecounter = 1;
        Random rand = new Random();

        public void run() {
            do{

                int dice_Value = rand.nextInt((6 - 1) + 1) - 1;
                diceNum = diceBox.getText().toString();
                numberOfDice = Integer.parseInt(diceNum);
                outputBox.setText("Dice"+dicecounter+dice_Value);
                dicecounter++;
                }while(diceCounter <= numberOfDice);    
            myHandler.post(this);
        }
    };


    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.roller_screen, menu);
        return true;
    }
}
{//Class start
钮扣辊;
整数骰子;
整数计数器;
编辑文本框;
编辑文本输出框;
字符串diceNum;
Handler myHandler=newhandler();
私有布尔运行;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u roller\u屏幕);
滚动=(按钮)findViewById(R.id.roll_按钮);
diceBox=(EditText)findViewById(R.id.numberOfDiceBox);
outputBox=(EditText)findViewById(R.id.outputBox);
roll.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v)
{
myHandler.post(跑步者);
}
});
}
Runnable runner=新的Runnable(){
整数计数器=1;
Random rand=新的Random();
公开募捐{
做{
int dice_Value=rand.nextInt((6-1)+1)-1;
diceNum=diceBox.getText().toString();
numberOfDice=Integer.parseInt(diceNum);
outputBox.setText(“骰子”+骰子计数器+骰子值);
dicecounter++;

}while(diceCounter这几乎肯定是一个无休止的循环问题:
diceCounter
从1开始,因此如果您在
diceBox
中输入小于2的值,
do..while
循环将永远不会终止。计数器应从零开始,您应该验证用户输入的骰子值的数量(包括检查数字格式异常,除非编辑控件仅允许数字?)


但是在任何情况下,为什么会有一个
do..while
循环呢?它所做的只是覆盖
输出框中的文本,所以即使循环被修复,用户所看到的都是循环最后一次迭代的结果。

您能告诉我们问题是什么吗?您是否遇到异常?还是挂起?或者它只是没有像预期的那样工作吗?如果是,你得到了什么输出?请正确回答你的问题,并向我们解释,你面临的确切问题是什么?当我单击按钮执行处理程序时(执行我的runnable,执行do while)它只是挂起,我得到应用程序已停止响应消息,在模拟器和Asus记事本HD7中测试。您的while循环将“diceCounter”与“numberOfDice”进行比较,但您正在增加一个名为“diceCounter”的变量,因此while比较的条件不会改变,并且可能永远不会结束。“numberOfDice”等于来自“diceBox”的用户输入,因此循环应一直运行,直到“diceCounter”等于“numberOfDice”我对这一点还不太了解,我认为做一段时间就可以完成我的目标。不过,处理程序和runnable是否很好?它们是否可以使用不同的方式处理逻辑?取决于您试图实现的目标。您希望显示器定期显示一个新的随机骰子?还是在每次单击时显示一个新的骰子?或者其他什么?修饰一下你的问题是你想做什么。diceBox通过numberofDice设置要滚动的骰子数,这也是循环应该运行的次数。循环输出和随机骰子数到每个循环的输出框中。我通过切换到for循环使输出工作,但输出不会永远停止它的运行。