2

我有一个关于 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。所以我的问题是,它怎么知道如何做到这一点?这太痛苦了!!哈哈

4

3 回答 3

5

因为multiArray真的是数组数组。multiArray[a]对对象的引用也是如此。该对象本身就是一个数组。该数组有一个长度 (8),以及一个名为lengthwhich 的属性可用于返回该长度。

于 2012-07-06T00:15:53.503 回答
0

你可以试试这样看。

public class Arrays{
  public static class EightStrings {
    public String[] strings = new String[8];
  }
  EightStrings[] tenOfThem = new EightStrings[10];
}
于 2012-07-06T01:29:11.293 回答
0

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

String[] array;

声明您将拥有一个长度未知的字符串数组。
调用:System.out.println(array.length)此时将失败并出现编译错误,因为array尚未初始化(因此编译器无法知道它有多长)。

通过做:

String[] array = new String[8]

您声明您将拥有字符串数组并对其进行初始化,指定它将有 8 个字符串的空间,然后编译器为这 8 个字符串分配空间。需要注意的重要一点是,即使编译器现在知道您将在数组中存储 8 个字符串,它也会用 8 个空值填充它。

所以此时调用System.out.println(array.length)将返回 8(编译器知道大小),但调用System.out.println(array[1])将返回 a Null Pointer Exception(其中有 8 个空值)。

现在,在您提供的示例中,您要声明一个二维数组,这是一个包含其他数组的数组。

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

所以system.out.println(multiArray[x].length);在初始化多数组之后做被翻译为“第 X 个包含数组的长度是多少?”,由于您的初始化,编译器现在知道所有包含数组的长度是 8,即使它们现在充满了空值.

希望它有助于增加更多的理解!

于 2012-07-06T01:00:00.463 回答