For循环不停止,随机生成的数字不被保存(猜数字游戏)



我在Android应用程序中做一个数字猜谜游戏。你有三次尝试猜数字。如果你用完试验,那么你就输了。

我添加了一个for循环,这样每次用户输入时,它都会增加一个。但是,当我运行应用程序并且输入数字超过三次时,它不会显示"您没有更多尝试";消息,好像没有计算尝试次数。

我试过把for改为重启按钮,然后每次我点击重启按钮,它又增加了一个。但是,这也没有用。

我当前的代码是:

public class MainActivity extends AppCompatActivity {
private int trials;
private int maxTrials = 3;
private TextView s_title, t_rules, strt_title, t_introgss;
private Button btn_start;
private EditText num_input;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
num_input = findViewById(R.id.num_input);
btn_start = findViewById(R.id.btn_start);
s_title = findViewById(R.id.s_title);
t_rules = findViewById(R.id.t_rules);
strt_title = findViewById(R.id.strt_title);
t_introgss = findViewById(R.id.t_introgss);
btn_start.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View arg0){
s_title.setVisibility(View.INVISIBLE);
t_rules.setVisibility(View.INVISIBLE);
btn_start.setVisibility(View.INVISIBLE);
strt_title.setVisibility(View.VISIBLE);
t_introgss.setVisibility(View.VISIBLE);
num_input.setVisibility(View.VISIBLE);
}
});

num_input.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int guessNum = Integer.parseInt(num_input.getText().toString());
int number = 1 + (int) (30 * Math.random());
for (trials = 0; trials < maxTrials; trials++) {
if (guessNum == number) {
Toast.makeText(MainActivity.this, "You won!", Toast.LENGTH_SHORT).show();
} else if (guessNum < number && trials != maxTrials - 1) {
Toast.makeText(MainActivity.this, "The number is bigger", Toast.LENGTH_SHORT).show();
} else if (guessNum > number && trials != maxTrials - 1) {
Toast.makeText(MainActivity.this, "The number is smaller", Toast.LENGTH_SHORT).show();
}
if (trials == maxTrials) {
Toast.makeText(MainActivity.this, "You dont have more tries", Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this, "The number was " + number, Toast.LENGTH_SHORT).show();
break;
}
}
}
});
}

}

我认为它没有计算试验次数,因为每次用户输入猜测时,它都会生成一个随机数。我试着输入17,它显示一条消息,"值更大";输入18,显示"值更小"的信息。就好像它没有保存随机数。

您不必中断,因为这应该由for循环处理——@mkjh

这已经是for循环结束的原因,所以把它放在后面而不是作为测试/中断条件会更有效。另外,

尝试将其更改为trials <= maxTrials - @viv3k

// start at trial 1 & end when trial == the max
for (trials = 1; trials <= maxTrials; trials++) 
{
...
}
// then after that loop
Toast.makeText(MainActivity.this, "You dont have more tries", Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this, "The number was " + number, Toast.LENGTH_SHORT).show();

break语句由for循环中的测试条件trials < maxTrials提供

编辑附加信息

一旦我输入一个数字,"这个数字是……"消息重复三次,并显示用户用尽了试验次数,但只输入了一个数字。

我可以看到一个值被输入到循环之外

public void onClick(View view) 
{
int guessNum = Integer.parseInt(num_input.getText().toString());
int number = 1 + (int) (30 * Math.random());

然后在循环中,没有其他地方可以让用户猜测,所以它每次都用相同的数字测试这些条件。在循环中读取用户的猜测值将允许您重新分配值以在下一个循环中进行测试(将格式编辑为while-loop)

trials = 0;
boolean found = false;
// under 3 guesses and not found
while(++trials <= maxTrials && !found) 
{
// they guessed it
if (guessNum == number) 
{
they win;
found = true;
} // they didn't guess it
else 
{
if (guessNum < number)
it is bigger;
else
it is smaller;
// take the next guess when it is > or <
guessNum = Integer.parseInt(num_input.getText().toString());
}
}
...
}    

注意这不是完整代码

trials永远不会是==maxTrials。在for循环中,从trials = 0开始,并在trials < maxTrials时停止循环。标准应该改为trials == maxTrials-1。此外,您不必使用break,因为它应该由for循环

处理。

最新更新