2014-07-11 22 views
0

我希望能夠聲明數組並且其大小應該是字符串中相應的分割數的代碼的這一部分存在問題。 或者我需要計算字符串中的逗號的數量並相應地分配大小還是有更好的解決方案。在if條件中聲明數組的方法

String MapPath2[]; 
    if(type.equals("comparative")) 
     MapPath2[]=args[1].split(","); 

我最近沒有機會在java中編寫代碼。如果這是一個愚蠢的問題,請引導我作爲一個noob。感謝你的幫助。

+0

這不是有效的Java。 –

+2

除了除去賦值中的[]外,這應該沒問題。 'String.split'將返回數組 - 你不需要預先分配它。 –

+0

不要命名這樣的變量。稱之爲'mapPath2'。 –

回答

4

你並不需要聲明的大小,如果你刪除多餘的[]你有什麼是好的:

String MapPath2[]; 
if(type.equals("comparative")) 
    MapPath2=args[1].split(","); 

陣列split還給你有合適的尺寸。如果您需要知道生成的尺寸,請使用MapPath2.length(分配後)。

你可能想要做的東西else爲好,使MapPath2有一個定值兩種方式:

String MapPath2[]; 
if(type.equals("comparative")) 
    MapPath2=args[1].split(","); 
else 
    MapPath2=null; 

或更簡潔:

String MapPath2[]; 
MapPath2 = type.equals("comparative") ? args[1].split(",") : null; 

(相反的null s,如果具有空陣列的對於隨後的邏輯是優選的,因爲有時是方便的,將null替換爲new String[0]上方的nd下面。其他時候,它更得心應手有null爲「無數據」標誌)


邊注:有在Java世界中一些壓倒性共同的代碼風格慣例,你會得到最好的建議在您的代碼中使用:

  1. 變量名稱應該以小寫字母開頭,以免與類名混淆。

  2. []應與類型名稱,而不是變量名稱。

  3. 即使當ifelse只有一行時,始終使用{}

  4. 在操作員和關鍵字周圍放置空格以方便閱讀。

應用這些:

String[] mapPath2; 
if (type.equals("comparative")) { 
    mapPath2 = args[1].split(","); 
} 
else { 
    mapPath2 = null; 
} 

許多人也把else在同一行},所以:

String[] mapPath2; 
if (type.equals("comparative")) { 
    mapPath2 = args[1].split(","); 
} else { 
    mapPath2 = null; 
} 

再或者,更簡潔:

String[] mapPath2; 
mapPath2 = type.equals("comparative") ? args[1].split(",") : null; 
+3

理想情況下使用更傳統的名稱和方括號放置:) –

+0

@JonSkeet:的確如此。 :-)我已經在最後添加了一個註釋。 –

+1

謝謝@ T.J.Crowder。我無法再接受你的答案再過9分鐘。 –

1

如果您不知道需要的尺寸,則可以使用List而不是Array

然後你可以使用

List<String> list = new ArrayList<>(); 
    if(type.equals("comparative")){ 
     Collections.addAll(list, args[1].split(",")); 
    } 
+0

*「如果你不知道它需要什麼大小,你可以使用'List'而不是'Array'。」*你可以*,但即使你不知道大小,你也可以使用一個數組, 'split'會爲你處理。在上面,你仍然在創建一個數組(實際上,你創建了兩個,其中一個是臨時的 - 而且很可能創建三個或更多,因爲第一個可能需要在addAll期間至少重新分配一次,可能不止一個)。 –