java - 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();
}
}
解决方案
不要Random
在这里使用,Random
在循环中重新创建 a 将选择相同的种子,这将使它根本不是随机的。幸运的是ThreadLocalRandom
,您可以将其用作替代品。喜欢,
int randInt = ThreadLocalRandom.current().nextInt(20) + 1;
推荐阅读
- vue.js - NPM 没有安装在本地机器上
- jupyter-notebook - Pycharm:更改导入模块的代码后如何刷新Jupyter
- python - 更新机器人而不关闭它不和谐 python
- java - Arrays-Java,与数组相同位置的元素之和
- java - Java 11 HttpClient 通过代理对 HTTPS 资源的请求
- python - for循环中字典的赋值
- macos - 带有 iconv 选项的 rsync 消息
- reactjs - 反应:当父母的价值改变时,孩子不会更新
- android - 将 Jetpack Compose State 委托语法与数据类一起使用
- c++ - boost::property_tree C++ JSON Writer,不需要的数字格式