2014-09-06 94 views
1

我從頭開始考慮變量的範圍規則。我對編程並不陌生,這使我更害怕,我不知道這個問題的答案。變量的範圍規則

記得閱讀有關變量作用域在網絡上,他們也會有這樣的例子中,他們將有一個{}外部聲明的變量,他們會改變{}塊內的值,而當他們打印它在這兩個不同的範圍內,它們會得到不同的結果。

現在,在下面的代碼中。

main(){ 
    int a=20; 
    sysout(a); 

    if(true){ 
    a=30; 
    sysout(a); 
    } 
    sysout(a); 
} 

現在,我得到20,30,30作爲輸出。我對此感到滿意。但後來我想到了互聯網上的那些例子給我看到了不同的結果。所以我想我會在{}

碼內再次宣佈a

main(){ 
    int a=20; 
    sysout(a); 

    if(true){ 
    int a; // In java, this gives me error, saying duplicate local variable a. 
    a=30; 
    sysout(a); 
    } 
    sysout(a); 
} 

那麼,究竟是例子,我在網上看到的。如果有人能讓我擺脫苦難。

謝謝

回答

3

如果是這種例子:

int a=20; 
main(){ 
    sysout(a); 

    if(true){ 
    int a = 30; // now this will shadow the class variable a 
    sysout(a); 
    } 
    sysout(a); 
} 

現在輸出應該是:

20 30 20 
+0

啊,是的。我想這就是它。謝謝 – Kraken 2014-09-06 06:13:07

0

局部變量不能在本地範圍內重新聲明。在第二種情況下,變量a位於main方法的本地範圍內,並且您又試圖在不允許的塊的本地範圍內聲明它。

您可以更好地試試這個:

int a=20; //Here a is outside the scope of main, so you can redeclare it. 
main(){ 
    sysout(a); 

    if(true){ 
    int a; 
    a=30; 
    sysout(a); 
    } 
    sysout(a); 
} 
+0

剛纔不是簡單地複製我的代碼; - ) – 2014-09-06 06:13:04

+0

@JunedAhsan: - 絕對不是,我在添加解釋,並且只是添加了代碼。所以你打我在那裏 – 2014-09-06 06:13:58

+0

也許是巧合,但我有疑問,特別是因爲評論。 – 2014-09-06 06:14:57