Java onCreate中声明的随机整数

Java onCreate中声明的随机整数,java,android,random,Java,Android,Random,我目前正在学习Android,我对Java有很好的基础 我尝试在onCreate中使用以下代码来获得一个随机整数(1-20): 在我的主要活动课上: public class MainActivity extends AppCompatActivity { int randomNumber; 它不工作,我只得到0作为随机数 但是,如果我不在onCreat上声明我的随机整数,而只在Mainactivity中声明,则它可以工作: public class MainActivity exte

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

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

在我的主要活动课上:

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方法中声明我的random。使用Math.random但使用rand.nextInt时,我能够使用其他代码实现它,但我想了解原因


未显示OnClick方法代码。

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

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

之所以会发生这种情况,是因为全局int变量不是局部变量,但默认情况下实例变量是用0初始化的。
我希望我能回答这个问题。

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

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

之所以会发生这种情况,是因为全局int变量不是局部变量,但默认情况下实例变量是用0初始化的。
我希望我能回答这个问题。

是的,如果我不在onCreate方法中声明integer randomNumber,它会起作用:

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

谢谢你的帮助

是,如果我不在onCreate方法中声明integer randomNumber,它将起作用:

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

谢谢你的帮助

“因为全局int变量默认初始化为0”,听起来不对。是的,你是对的,我编辑了我的答案。多亏了梅斯蒂尔,原语变量是如何“默认”初始化的?它是空的,不是0。如果一个基元变量是类的实例,那么基元变量会自动初始化,默认值为int,布尔值为0,假字符串为null。你也可以尝试“因为全局int变量默认初始化为0”,这听起来不对。是的,你是对的,我编辑了我的答案。多亏了梅斯蒂尔,原语变量是如何“默认”初始化的?它是空的,不是0。如果基元变量是类的实例,则基元变量将自动初始化,默认值为int,布尔值为0,假字符串为null。您也可以尝试这些。发布的第一个onCreate方法是否属于MainActivity?是,它确实属于MainActivity发布的第一个onCreate方法是否属于MainActivity属于MainActivity?是的,它确实属于MainActivity