2012-07-06 74 views
2

我有一個關於Java如何處理數組的簡短問題。下面是我的代碼:瞭解Java中的數組索引

//import java.util.Arrays; 
import static java.lang.System.out; 

public class Arrays 
{  
    public static void main(String[] args) 
    {   
     String [][] multiArray = new String[10][8]; 

     int k = 1; 
     while (k <= 61) {out.print('-'); k++;} 
     out.println(); 

     for (int i = 0; i < multiArray.length; i++) 
     { 
      for (int j = 0; j < multiArray[i].length; j++) 
      { 
       multiArray[i][j] = i + "" + j; 
       out.print ("| " + multiArray[i][j] + " "); 
      } 
      out.println ("|"); 
     }   
     k = 1; 
     while (k <= 61) {out.print('-'); k++;} 
     out.println();   
    }  
} 

我明白,你必須創建一個雙「for」循環打印出值兩個維度,並且你必須有:

multiArray[i].length 

,以便它知道以引用第二維的長度。我只是不明白它是如何工作的。

我感到困惑的是這樣的:在節目的一開始,之後直接我宣佈我的數組,如果我寫這樣一份聲明:

system.out.println (multiArray.length);  

這將打印的值10,這是我在第一維中聲明的長度。如果I,然而,創建像「INT A = 0」或「INT idontgetthis = 0」,然後一些隨機變量I寫:

system.out.println (multiArray[a].length); 

它在某種程度上知道打印的第二尺寸的長度,所以8.我的問題是,它如何知道如何做到這一點?這太痛苦了!!大聲笑

回答

5

因爲multiArray是一個真正的數組數組。所以multiArray[a]是一個對象的引用。該對象本身就是一個數組。該數組具有長度(8),並且可以使用名爲length的屬性來返回該長度。

+0

數組的數組? Gaahhhh哈哈我正在盡力理解。感謝您的倉促迴應! – 2012-07-06 00:25:06

0

基本上,這是一個概念的混淆,這樣做:

String[] array;

聲明,你將有一個字符串與未知lenght的數組。
此時調用:System.out.println(array.length)將因編譯錯誤而失敗,因爲array尚未初始化(因此編譯器無法知道它有多長時間)。

這樣做:

String[] array = new String[8]

聲明,你將有和String數組和初始化,並指定將有空間爲8個字符串,編譯器則這個8個絃樂分配空間。 需要注意的一點是,即使編譯器現在知道您將在您的數組中存儲8個字符串,它也會填充8個空值。

因此,此時調用System.out.println(array.length)將返回8(編譯器知道該大小),但撥打System.out.println(array[1])將返回Null Pointer Exception(您有8個空值)。

現在,在您提供的示例中,您聲明瞭一個二維數組,這是一個包含其他數組的數組。

二維陣列被初始化爲String[][] multiarray = new String[10][8];和邏輯是相同的,如簡單的陣列中,new String[10][8];指示包含其它陣列的陣列的lenght和new String[10][8];表示包含數組的長度。

在初始化完成後,多數陣列被編譯爲「第X個包含數組的長度是多少?」,因爲初始化,編譯器現在知道所有包含數組都是8,即使它們已滿目前爲空值。

希望它有助於增加一點理解!

+1

啊哈哈!尚不清楚,但這絕對是開始變得更有意義。我想我習慣於將FORTRAN和C存儲它們的方式想象成「x,y」配對。對我來說,這是一種更加數學的方式,這更有意義,但是很好。謝謝! – 2012-07-07 05:52:15

0

你可以試着像這樣看着它。

public class Arrays{ 
    public static class EightStrings { 
    public String[] strings = new String[8]; 
    } 
    EightStrings[] tenOfThem = new EightStrings[10]; 
}