2012-03-27 45 views
4

我一直在試圖弄清楚到底發生了什麼。我只是想弄清楚下面我已經評論過的兩行代碼。我發現這個程序沒有聲明數組的完整維數(而不是new int [10] [5];它只是決定不用聲明'new int [10] [];'它就像第二個數組的長度沒有關係(將其更改爲1或100不影響輸出)。Java:聲明一個沒有指定數組大小的多維數組(例如new int [10] [])

int[][] tri = new int[10][]; //this lack of giving the size of the 2nd array is strange 
for (int r=0; r<tri.length; r++) { 
tri[r] = new int[r+1]; //I'm not sure what this line is doing really 
} 
for (int r=0; r<tri.length; r++) { 
for (int a=0; a<tri[r].length; a++) { 
    System.out.print(tri[r][a]); 
    } 
System.out.println(); 
} 

回答

8

第一行使得INT數組的數組。有10個插槽,用於INT陣列創建的。

第三行創建一個新的int數組,並將它放在您首先創建的其中一個插槽中,新的int數組在其中一個插入點中具有r + 1個空格

因此,位置0中的int數組將具有1個插槽INT。位置1的int數組將有一個int的2個槽。整體形狀將是:

[ 
    [0], 
    [0,0], 
    [0,0,0], 
    ..., 
    [0,0,0,0,0,0,0,0,0,0] 
] 

,其在與該變量名三暗示(它看起來像一個三角形)

+0

[對不起我的最後的評論是不完整,我無法將其刪除]因此,它似乎是第一個數組的長度必須始終聲明,但在此之後,數組長度的長度可以在現場創建? (例如new int [10] [];因爲它聲明瞭第一個長度,所以是可以的)。另外行'tri [r] = new int [r + 1];'似乎創建數組的第二部分,但是有可能使這個數組大於第一個(當我這樣做會創建異常)? – 2012-03-28 14:17:52

+0

總共有11個陣列。第一個數組是其他10個數組的數組。 'new int [10] []'說:「讓我成爲一個可以容納'int []'對象的數組,併爲它們設置10個插槽。」你的代碼片段的第三行說:「用'r + 1'插槽創建一個int數組,並將新數組放入已存在的數組'r'中。」您可以根據需要將11個陣列中的任何一個設置爲大或小。所有11種尺寸都是獨立的。 – 2012-03-28 14:27:01

1

它只是宣告10列的陣列。每個「子」陣列的長度都可以不同。

0

它不缺乏的,它基本上沒有設置,因爲它可以有很多領域

和第二線

tri[r] = new int[r+1]; 

是設置所有字段不要求特定的金額,不爲空

2

所有new int[10][]聲明的是一個大小爲10的數組,其中包含null數組。

for循環中,null數組正在被實例化爲不斷增加的數組大小。

2

它更有意義,如果你認爲一個多維數組作爲數組的數組:

int [][] tri = new int[10][]; // This is an array of 10 arrays 

tri[r] = new int[r+1]; // This is setting the r'th array to 
         // a new array of r+1 ints