作者awpadam (adam!)
看板java
標題[問題] 一題跟變數初始化有關的問題
時間Sat Jul 25 21:33:15 2020
public class Test {
static int result;
public static void main(String[] args) {
double x ;
if( result == 0 ){
x = 10.0;
System.out.println("123");
}
System.out.print(x);
}
}
最後要印出x的值的時候會出現編譯錯誤
說 x 沒有初始化
一開始我懷疑if沒有進入
所以print 123
結果有印出123,表示有進入
然後我把if的條件直接改成true就可以印出x
請問這是什麼原因呢?
先謝謝各位高手的幫忙~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.177.13.6 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1595683997.A.969.html
1F:推 PTTTTTTTT: local variable 沒有初始值 只有class variable有 07/25 21:41
但是我在if裡面有給值了呀
※ 編輯: awpadam (180.177.13.6 臺灣), 07/25/2020 21:48:37
2F:→ gasbomb: 你加個else {x = 0.0} 應該就會過了 07/25 22:05
3F:→ gasbomb: 編譯器只要抓到區域變數有可能尚未初始化就不會讓你過 07/25 22:09
4F:→ gasbomb: 以你的例子來說 萬一 result != 0, x 就不會初始化 07/25 22:11
原來如此,我了解了。謝謝你的幫忙
※ 編輯: awpadam (180.177.13.6 臺灣), 07/25/2020 22:14:35
5F:→ ssccg: 必須是所有路徑都有初始化才叫有初始化 07/25 22:16
你的意思是說所有的分支條件嗎?
※ 編輯: awpadam (180.177.13.6 臺灣), 07/25/2020 22:17:58
6F:→ swallowcc: 那問你個問題,如果你的 result 不等於零, 你期望double 07/25 22:44
7F:→ swallowcc: 會印出來什麼東西呢? 07/25 22:44
8F:→ swallowcc: x才對,不是double,用錯詞。 07/25 22:45
我沒想到java的編譯器這麼嚴格,會幫我考慮其他狀況
蠻貼心的XD
※ 編輯: awpadam (180.177.13.6 臺灣), 07/25/2020 22:58:11