繁体   English   中英

在onCreate中声明的随机整数

[英]Random integer declared in onCreate

我目前正在学习Android,我在Java方面有很好的基础。

我尝试在onCreate中使用以下代码来获取随机整数(1-20):

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    int randomNumber = (int)(Math.random()*20)+1;

}

在我的MainActivity类上:

public class MainActivity extends AppCompatActivity {
    int randomNumber;

它不起作用,我只能得到0作为随机数。

但是,如果我没有在onCreat上声明我的随机整数,而仅在Mainactivity中声明了它,那么它将起作用:

public class MainActivity extends AppCompatActivity {
    int randomNumber=(int)(Math.random()*20)+1;

最后,如果我使用另一种方法来获取onCreate上声明的随机数,则它的工作方式如下所示:

public class MainActivity extends AppCompatActivity {
    int randomNumber;

....

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Random rand = new Random();
        randomNumber=rand.nextInt(20)+1;
    }
}

我不明白为什么我不能在onCreate方法中声明随机变量。 有了Math.random,但无论如何都与rand.nextInt一起工作,我能够使用其他代码来实现它,但是我想理解为什么。

未显示OnClick方法代码。

您的代码中有问题。 您正在使用变量“ randomNumber”作为全局变量。 但是在oncreate方法中,您正在创建另一个具有相同名称“ randomNumber”的变量。 这意味着您获得的随机数实际上存储在局部变量中,而不是全局变量中。 还有你的问题

It does not work, I get only 0 as random number.

发生这种情况是因为全局int变量不是局部变量,而是实例变量默认情况下将实例变量初始化为0。我希望我回答这个问题。

是的,如果我没有在onCreate方法中声明整数randomNumber,它将起作用:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    randomNumber = (int)(Math.random()*20)+1;
}

谢谢你的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM