2017-04-10 121 views
0

我想知道是否有任何方法來聲明一個不同大小的數組,這取決於是否滿足if語句條件。然而,在輸入這​​個代碼到NetBeans後:java聲明數組基於If語句

if(winner == true) 
    double data[][] = new double[16][5]; 
else 
    double data[][] = new double[14][5]; 

我收到一條錯誤信息,指出:變量聲明這裏不允許的。

爲什麼不允許?有什麼辦法可以完成我想要做的事情嗎? Tia。

注意

正如作出提供的答案清楚了,我寫這篇文章時,沒有考慮範圍。我道歉。感謝所有提供有用解決方案和見解的人。

+0

聲明外部引用if並初始化它內部 – jmw5598

+0

問題是你有一個單獨的代碼範圍聲明和指定一個範圍局部變量。該變量在設置後會立即超出範圍,因此IDE假定您犯了一些錯誤。 – Wietlol

+1

您還可以:'雙數據[] [] =新雙贏[贏家? 16:14] [5];' – Oneiros

回答

11

另一種解決辦法是:

double data[][] = new double[winner ? 16 : 14][5]; 

x ? a : b這個東西被稱爲「三元操作符」。如果x爲真,則評估爲a,否則爲b

1

你必須聲明你的陣列的if..else塊外面,初始化你if..else塊內部:

double data[][]; 

if(winner == true) 
    data = new double[16][5]; 
else 
    data = new double[14][5]; 
+2

如果你想成爲偏執狂,那肯定是因爲其他海報中的一個不公平,並且希望他自己的解決方案超越你的!老實說,我會建議刪除你的答案,而不是提供超過上述3的答案,在這個過程中擺脫downvote。我向你提出建議,因爲你已經得到了贊成,但我完全同意所有這些答案都是平等的;這只是愚蠢的看到相同的答案3次 – Aaron

+2

這可能是因爲在任務期間的括號?我在宣告行上收到意想不到的標記。如果我將'data [] [] = new double [16] [5];'更改爲'data = new double [16] [5];'它通過很好。 – DanielBarbarian

+2

哦,是的,這可能是我的錯誤,我已經修復它的原因@DanielBarbarian謝謝你的幫助 –

5

你應該這樣做:

double data[][]; 
if(winner == true) // or just --> if (winner) 
    data = new double[16][5]; 
else 
    data = new double[14][5]; 

從本質上講,當你在,如果聲明它,你只能在if中使用它。它的範圍是有限的,如果。

1

您不想在if塊內聲明變量,因爲一旦退出該塊,它就會超出範圍。在if之前聲明變量,然後在裏面初始化它。

double data[][]; 

if(winner == true) 
    data = new double[16][5]; 
else 
    data = new double[14][5]; 
1

試試這個:

double data[][]; 
if(winner) 
    data = new double[16][5]; 
else 
    data = new double[14][5]; 
2

聲明數組爲IF函數,他們的arent再次使用,即時通訊裏面不知道,如果這就是你錯誤的原因,但也許申報IF外的VAR聲明

double data[][]; 

if(winner == true){ 
    data = new double[16][5]; 
}else{ 
    data = new double[14][5]; 
} 
-2

這是一個古老的角落的情況下,加花括號,你應該這樣做:

 if(winner == true) { 
      double data[][] = new double[16][5]; 
     } 
     else { 
      double data[][] = new double[14][5]; 
     } 

這是由於這樣的事實,你聲明的局部變量的聲明語句。這種行爲在Java Puzzlers中有描述,它在JLS部分14.4中有介紹。

+1

不會有任何錯誤了,但錯誤是有一個很好的理由 – Aaron

+1

所以,而不是修復錯誤,你更喜歡「隱藏」它嗎?聰明。 – Tom

+0

@Aaron和錯誤是什麼?我認爲這是一種未知的語言特徵,因爲它已被JLS在14.4節中涵蓋。以下是Java Puzzlers的一部分:局部變量聲明看起來像一個聲明,但從技術上講不是;它是一個局部變量聲明語句[JLS 14.4]。 – comanitza

1

在if語句中只允許聲明,但聲明不是聲明,所以不允許在該位置使用。

好吧,試試這樣;

double data[][]; 
if(winner) 
    data=new double[16][5]; 
else 
    data=new double[14][5]; 
0

這是使用三元運算符的絕好機會。

double data[][] = (isWinner)?new double[16][5] : new double[14][5]; 

建議

  • 名稱的布爾變量isWinner而不是winner,你可以 執行像上面的例子檢查。通過刪除條件 winner == true您的代碼變得更容易閱讀。
  • 使用ternary operator,它使您的代碼更短,更清晰地閱讀。