2012-12-15 78 views
0

我目前正在用Java創建一個類似於下面的程序:它要求變量AC被初始化。變量必須是原始的

double AC; 
System.out.println("Please choose A or B") 

If(Condition to see if it A) 
{ 
AC = 1 
} 
else if(Condition to see if it B) 
{ 
AC = 2 
} 
else 
{ 
System.out.println("Please Enter a valid choice!") 
} 

double ab = AC * 2 

這將給出一個錯誤「變速交流必須初始化」,它造成這種情況的原因是,如果用戶不選擇A或B,就沒有交流是在使用雙AB。我該如何解決這個問題?謝謝

+1

請不要給我們僞代碼,很難知道哪個錯誤對您很重要。 –

回答

1

這就是它說的:你必須確保AC在你使用它之前被初始化。

你的問題是AC沒有價值,如果你在最後else

你可以給它一個默認值:

double AC = 33.2; // or Double.NaN if you prefer 
System.out.println("Please choose A or B") 
... 
-1

你只需要初始化交流,因爲它是可能的「如果」既不會選擇。只是做

double AC = -1; 

或一些虛擬值。

+2

通過混淆OP的變量'AC'和'ab',您正在混淆潛在的問題讀者和答案。 –

+0

謝謝你的兩個答案。有沒有辦法停止代碼後,它打印「請輸入一個有效的選擇」,而不是繼續雙ab?謝謝 – Rennade

0

局部變量和原語使用前應進行初始化,因爲你會知道從值

因此,你必須初始化這種變量的值會發生什麼AC = <<any value>>;

請考慮以下例如

int a; // Valid 
int b; 
println("a=" + b); // Not valid since b's value has never been assigned 
+0

謝謝你的答案。有沒有辦法停止代碼後運行「請輸入一個有效的選擇」謝謝 – Rennade

+1

@ user1906857更好地給你比任何僞代碼有用的東西。 – Smit

+0

如果你正在使用循環,那麼你可以打破循環,或者如果你正在使用方法,那麼你可以從方法返回或拋出'IllegalArgumentException'。 –

0

在Java 7中你可以使用開關用繩子

switch (choose) { 
    case "A": 
     AC = 1; 
     break; 

    case "B": 
     AC = 2; 
     break; 

    default: 
     AC = -1; 
     break; 
    } 
0

這裏包括兩個:

  • 它僅要求使用一個有效的數字執行的else條款。即使這樣做會編譯,由於值永遠不會被重建爲有效值,程序中的流程將不正確;也就是說,你不會循環再次檢查答案。

  • else子句未嘗試將值賦給AC,該值是編譯器在分配AC時看到的一個位置;不能保證其他兩個代碼路徑中的任何一個都會被遵循,但else總是跟着。它不能在那裏看到,所以你得到「變量可能未被初始化」的錯誤。