首页 > 解决方案 > Random.nextInt() 返回相同的数字

问题描述

我的代码在下面,我尝试使用 Random 类和 Math.Random() 方法。它在第一次调用时运行良好,但是当我在单击应用程序中的“再试一次”按钮后尝试重玩随机猜谜游戏时,会返回相同的数字。

重试按钮调用 TryAgain()

package com.example.austin.higherorlower;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.util.Random;

public class MainActivity extends AppCompatActivity {

    int randNumber;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button tryAgain = findViewById(R.id.tryAgainButton);
        randNumber = returnRand();
    }

    public int returnRand(){
        Random rand = new Random();
        int randInt = rand.nextInt(20) + 1;
        Button tryAgain = findViewById(R.id.tryAgainButton);
        tryAgain.setVisibility(View.GONE);
        return randInt;
    }

    public void GuessRandom(View view) {

        EditText numberGuessedEdit = findViewById(R.id.guessedRandomValue);
        String numberGuessedString = numberGuessedEdit.getText().toString();
        int numberGuessed = Integer.parseInt(numberGuessedString);
        if (numberGuessed < randNumber) {
            Toast.makeText(getApplicationContext(), "Higher", Toast.LENGTH_SHORT).show();
        }
        else if(numberGuessed > randNumber) {
            Toast.makeText(getApplicationContext(), "Lower", Toast.LENGTH_SHORT).show();
        }
        else if(numberGuessed == randNumber){
            Toast.makeText(getApplicationContext(), "Correct! Try Again!", Toast.LENGTH_SHORT).show();
            Button tryAgain = findViewById(R.id.tryAgainButton);
            tryAgain.setVisibility(View.VISIBLE);
        }
    }

    public void TryAgain(View view){
        returnRand();
    }
}

标签: javaandroid

解决方案


不要Random在这里使用,Random在循环中重新创建 a 将选择相同的种子,这将使它根本不是随机的。幸运的是ThreadLocalRandom,您可以将其用作替代品。喜欢,

int randInt = ThreadLocalRandom.current().nextInt(20) + 1;

推荐阅读