Java DoWhile、Handler和runnable-Android
我一辈子都不能在按钮点击时运行这个do-while循环,即使有一个runnable and处理程序。谁能告诉我哪里出了错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
{//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循环使输出工作,但输出不会永远停止它的运行。