2017-08-19 105 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; 
} 

感謝您的幫助!