随机数生成器重复returns 0s
Random number generator repeatedly returns 0s
我目前正在 Java 使用 Android Studio 学习在线课程。作为课程的一部分,我们进行了构建高数或低数猜谜游戏的练习。我写的初始代码工作得很好(尽管有点罗嗦,但我还在学习),它生成了一个随机数,并且所有正确的消息都工作正常。这是工作代码。
import java.util.Random;
public class MainActivity extends AppCompatActivity {
Random ran = new Random();
int gameStart = 1 + (int) (Math.random() * (30));
public void buttonClick(View view) {
EditText number = (EditText) findViewById(R.id.number);
Button button = (Button) findViewById(R.id.button);
int num = Integer.parseInt(number.getText().toString());
if (num == gameStart) {
Toast.makeText(this, "Correct!", Toast.LENGTH_SHORT).show();
} else if (num > gameStart) {
Toast.makeText(this, "Lower", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Higher", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
但是随后讲师引入了额外的代码,通过将 Random 设为方法并将其添加到初始 if 语句中,如果新数字的答案正确,则可以重新启动游戏。在视频中它起作用了,但是当我添加它并编译时,随机生成的唯一数字是 0。我已经尝试了所有方法,但看在上帝的份上,它无法正常工作。有人可以看看下面的更改并找出可能导致此问题的原因吗?需要修改什么?
public class MainActivity extends AppCompatActivity {
int gameStart;
public void gameRestart() {
Random ran = new Random();
int gameStart = 1 + (int) (Math.random() * (30));
}
public void buttonClick(View view) {
EditText number = (EditText) findViewById(R.id.number);
Button button = (Button) findViewById(R.id.button);
int num = Integer.parseInt(number.getText().toString());
if (num == gameStart) {
Toast.makeText(this, "Correct!", Toast.LENGTH_SHORT).show();
gameRestart();
}
int gameStart;
public void gameRestart() {
Random ran = new Random();
int gameStart = 1 + (int) (Math.random() * (30));
}
您永远不会更改实例变量 gameStart 的值,因此它保留默认值,即 0。
您在构造函数中创建了一个局部变量 gameStart,之后不再使用它。
将您的代码更改为此以设置实例变量:
int gameStart;
public void gameRestart() {
Random ran = new Random();
gameStart = 1 + (int) (Math.random() * (30));
}
编辑:正如@AndyTurner 所说:您也没有使用随机 class 的 运行 实例,因此您也可以删除该变量。
public void gameRestart() {
Random ran = new Random();
int gameStart = 1 + (int) (Math.random() * (30));
}
在这里,我假设您想将随机值存储在名为 gameStart
的成员变量中。
不是这样的,因为你在方法中重新定义了一个相同编号的局部变量。您只需要删除变量之前的 int
(并删除 ran
行,因为未使用)
public void gameRestart() {
gameStart = 1 + (int) (Math.random() * (30));
}
你可以试试这个;
final int random = new Random().nextInt(50) + 30;
// it will generate random number between 30 & 80
我目前正在 Java 使用 Android Studio 学习在线课程。作为课程的一部分,我们进行了构建高数或低数猜谜游戏的练习。我写的初始代码工作得很好(尽管有点罗嗦,但我还在学习),它生成了一个随机数,并且所有正确的消息都工作正常。这是工作代码。
import java.util.Random;
public class MainActivity extends AppCompatActivity {
Random ran = new Random();
int gameStart = 1 + (int) (Math.random() * (30));
public void buttonClick(View view) {
EditText number = (EditText) findViewById(R.id.number);
Button button = (Button) findViewById(R.id.button);
int num = Integer.parseInt(number.getText().toString());
if (num == gameStart) {
Toast.makeText(this, "Correct!", Toast.LENGTH_SHORT).show();
} else if (num > gameStart) {
Toast.makeText(this, "Lower", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Higher", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
但是随后讲师引入了额外的代码,通过将 Random 设为方法并将其添加到初始 if 语句中,如果新数字的答案正确,则可以重新启动游戏。在视频中它起作用了,但是当我添加它并编译时,随机生成的唯一数字是 0。我已经尝试了所有方法,但看在上帝的份上,它无法正常工作。有人可以看看下面的更改并找出可能导致此问题的原因吗?需要修改什么?
public class MainActivity extends AppCompatActivity {
int gameStart;
public void gameRestart() {
Random ran = new Random();
int gameStart = 1 + (int) (Math.random() * (30));
}
public void buttonClick(View view) {
EditText number = (EditText) findViewById(R.id.number);
Button button = (Button) findViewById(R.id.button);
int num = Integer.parseInt(number.getText().toString());
if (num == gameStart) {
Toast.makeText(this, "Correct!", Toast.LENGTH_SHORT).show();
gameRestart();
}
int gameStart;
public void gameRestart() {
Random ran = new Random();
int gameStart = 1 + (int) (Math.random() * (30));
}
您永远不会更改实例变量 gameStart 的值,因此它保留默认值,即 0。 您在构造函数中创建了一个局部变量 gameStart,之后不再使用它。
将您的代码更改为此以设置实例变量:
int gameStart;
public void gameRestart() {
Random ran = new Random();
gameStart = 1 + (int) (Math.random() * (30));
}
编辑:正如@AndyTurner 所说:您也没有使用随机 class 的 运行 实例,因此您也可以删除该变量。
public void gameRestart() {
Random ran = new Random();
int gameStart = 1 + (int) (Math.random() * (30));
}
在这里,我假设您想将随机值存储在名为 gameStart
的成员变量中。
不是这样的,因为你在方法中重新定义了一个相同编号的局部变量。您只需要删除变量之前的 int
(并删除 ran
行,因为未使用)
public void gameRestart() {
gameStart = 1 + (int) (Math.random() * (30));
}
你可以试试这个;
final int random = new Random().nextInt(50) + 30;
// it will generate random number between 30 & 80