2011-09-09 170 views
39

如果我不知道數組的第二維,我該如何得到第二維數組? array.length只給出第一個維度。獲取二維數組的長度

例如,在

public class B { 
    public static void main(String [] main){ 
     int [] [] nir = new int [2] [3]; 
     System.out.println(nir.length); 
    } 
} 

我將如何得到nir第二個維度,也就是3

感謝

回答

81

其中 3的值?您已創建了多維數組。 nir是int數組的數組;你有兩個長度爲三的數組。

System.out.println(nir[0].length); 

會給你你的第一個數組的長度。

另外值得注意的是,你不必像你那樣初始化一個多維數組,這意味着所有的數組不必是相同的長度(或根本不存在)。

int nir[][] = new int[5][]; 
nir[0] = new int[5]; 
nir[1] = new int[3]; 
System.out.println(nir[0].length); // 5 
System.out.println(nir[1].length); // 3 
System.out.println(nir[2].length); // Null pointer exception 
+6

1特別是對於危險的關於非矩形的建議(我的意思是假設你的數據是危險的,而不是使用非矩形是危險的)。這欺騙了許多新手程序員,並且讓許多本應該更加了解的非新手程序員變得愚蠢! – corsiKa

+2

所以本質上''3' in int [] [] nir = new int [2] [3];'是虛擬的(沒有實際用途)。對???或者它用於在每行中分配3個單元格 - 默認沒有。每列中的cols? – KNU

+0

@KNU如果你使用明確定義第二維的語法是3 ...那麼你得到每個數組的長度。我的答案的第二部分只是指出你不必使用這種語法。 –

2
int secondDimensionSize = nir[0].length; 

第一維度的每一個元素實際上是另一個陣列與所述第二尺寸的長度。

+0

是的,我沒有這樣想過。非常感謝。 – Numerator

6

你可以這樣做:

System.out.println(nir[0].length); 

但要注意,有在Java中沒有真正的二維數組。每個「第一級」數組包含另一個數組。這些陣列中的每一個都可以具有不同的大小。 nir[0].length的尺寸不一定與nir[1].length的尺寸相同。

你可以看看http://anh.cs.luc.edu/170/notes/2dArrays/ar2.html,它有一個很好的圖片來表明。

1
nir[0].length 

注0:你必須有你的數組中最小的一個陣列。
注1:並非所有的子陣列都不需要相同的長度。

1

假定長度是相同的在第二維中的每個陣列,可以使用

public class B {  
public static void main(String [] main){ 
    int [] [] nir= new int [2] [3]; 
    System.out.println(nir[0].length); 
} 
} 
3

使用

System.out.print(nir[0].length); 

看看這個for循環,其打印2維數組的內容 第二個循環遍歷每行中的列

for(int row =0 ; row < ntr.length; ++row) 
for(int column =0; column<ntr[row].length;++column) 
    System.out.print(ntr[row][column]); 
+0

注意如果第二維數組還沒有被創建,這可以拋出空指針異常;打印前應檢查'ntr [row]!= null'。 –

0

Remembe r,2D array實際上不是2D array。數組中的每個元素本身都是一個數組,而不一定是相同的大小。 因此,nir[0].length可能或可能不等於nir[1].lengthnir[2]length

希望能幫到..:)

0

擴展爲多維陣列總長度,

通常對於你的情況下,由於二維陣列的形狀是「平方」。

int length = nir.length * nir[0].length; 

但是,對於二維數組,每行可能不具有完全相同數量的元素。 因此我們需要遍歷每一行,添加一些元素。

int length = 0; 
for (int lvl = 0; lvl < _levels.length; lvl++) 
{ 
    length += _levels[ lvl ].length; 
} 

如果N-D數組,這意味着我們需要N-1循環來獲取每一行的大小。

2

下面是如何枚舉元素中鋸齒狀二維陣列(以3行3至5列)一個完整的解決方案:

String row = ""; 
    int[][] myArray = {{11, 12, 13}, {14, 15, 16, 17}, {18, 19, 20, 21, 22}}; 
    for (int i=0; i<myArray.length; i++) { 
     row+="\n"; 
     for (int j = 0; j<myArray[i].length; j++) { 
      row += myArray[i][j] + " "; 
     } 
    } 
    JOptionPane.showMessageDialog(null, "myArray contains:" + row); 

Jagged array's contents