我有一个关于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。所以我的问题是,它是如何知道如何做到这一点的?这太痛苦了!!洛尔
答案 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];
}