繁体   English   中英

做到这一点,处理程序和可运行-Android

[英]Do while, Handler and runnable -Android

我一生都无法做到这一点,即使使用可运行和处理程序,也无法通过单击按钮循环运行。 谁能告诉我我犯错的地方?

{//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;
    }
}

我不知道这是我的逻辑,还是我使用的运行器和处理程序完全错误。

这几乎可以肯定是一个无限循环的问题: dicecounter的一个,所以如果你输入一个不到两成的值开始diceBoxdo..while循环不会终止。 计数器应从零开始,并且您应该验证用户输入的骰子值的数量(包括检查数字格式异常,除非编辑控件仅允许数字?)

但是无论如何,为什么总有一个do..while循环呢? 它所做的只是覆盖 outputBox的文本,因此,即使循环已修复,用户也将看到的是循环的最后一次迭代的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM