2017-08-19 34 views
1

我目前正在学习Android,我在Java中有很好的基础。在onCreate中声明的随机整数

我尝试使用的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方法代码未显示。

+0

您发布的第一个onCreate方法是否属于MainActivity? – FWeigl

+0

是的,它确实属于MainActivity – dcvman

回答

0

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

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

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

+0

“因为全局变量默认是用0初始化的”这听起来不对。 – FWeigl

+0

是的,你是对的我编辑了我的答案。感谢纠正我 –

+0

不过,“缺省情况下”如何初始化一个初始变量?这是空,不是0 – FWeigl

0

是,如果我没有在onCreate方法声明整数randomNumber它的工作原理:

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

感谢您的帮助!