我无法为我的生活做到这一点,即使使用runnable和处理程序,也可以通过按钮单击循环运行。任何人都可以告诉我我犯了哪些错误吗?
{//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;
}
}
我无法弄清楚这是不是我的逻辑,或者我是否完全错误地使用了跑步者和处理程序。
答案 0 :(得分:0)
这几乎肯定是一个无限循环问题:dicecounter
从1开始,所以如果在diceBox
中输入小于2的值,do..while
循环将永远不会终止。计数器应该从零开始,你应该验证用户输入的骰子值的数量(包括检查数字格式异常,除非编辑控件只允许数字?)
但无论如何,为什么还有do..while
循环呢?它只是覆盖 outputBox
中的文本,所以即使循环被修复,所有用户都会看到循环的最后一次迭代的结果。