了解Java中的数组索引

时间:2012-07-06 00:12:07

标签: java arrays

我有一个关于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的值,这是我在第一个维度中声明的长度。但是,如果我创建一些随机变量,如“int a = 0”或“int idontgetthis = 0”,那么我写道:

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

它以某种方式知道打印第二维的长度,8。所以我的问题是,它是如何知道如何做到这一点的?这太痛苦了!!洛尔

3 个答案:

答案 0 :(得分:5)

因为multiArray实际上是一个数组数组。所以multiArray[a]是对象的引用。该对象本身就是一个数组。该数组有一个长度(8)和一个名为length的属性,可用于返回该长度。

答案 1 :(得分:0)

基本上,这是一个概念混乱,通过这样做:

String[] array;

声明您将拥有一系列长度未知的字符串。
此时对System.out.println(array.length)的调用将因编译错误而失败,因为array尚未已初始化(因此编译器无法知道它有多长)。< / p>

通过做:

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个空值)。

现在,在您提供的示例中,您声明了一个 bidimensional array ,这是一个包含其他数组的数组。

二维数组初始化为String[][] multiarray = new String[10][8];,逻辑与简单数组相同,new String [10] [8];表示该数据的长度包含其他数组的数组,new String[10] [8] ;表示包含数组的长度。

初始化多重阵列后,system.out.println(multiArray[x].length);转换为“包含Xth的数组的长度是多少?”,由于初始化,编译器现在知道所有包含的数组都是8,即使它们目前充满了空白。

希望有助于增加一点理解!

答案 2 :(得分:0)

你可以尝试这样看待它。

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