对于循环不停止和随机生成的数字不被保存(数字猜谜游戏)

For loop not stopping and random generated number not being saved (number guessing game)

我正在 Android 应用中玩猜数字游戏。你有 3 次机会来猜这个数字。如果你 运行 没有试炼,那么你就输了。

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

我试过将 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 并显示一条消息“值更小”。好像没有保存随机数。

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

You do not have to break as that should be handled by the for loop -- @mkjh

这已经是 for-loop 结束的原因,所以将它放在后面而不是作为 test/break 条件会更有效率。另外,

Try changing it to 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-loop

中的测试条件trials < maxTrials提供

编辑以获取更多信息

once I input a number, the "the number is ..." message repeats three times, and shows that the user ran out of trials, but only one number has been input.

我可以看到正在循环外输入一个值

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());
        }
    }
    ...
}    

注意这不是完整代码