随机数生成器重复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