Java中的双数组初始化

时间:2013-09-02 18:18:48

标签: java arrays initialization double

我正在阅读Java上的一本书,并且遇到了一个例子,其中一个double类型的数组以我以前从未见过的方式初始化。它是什么类型的初始化以及它可以在何处使用?

double m[][]={
    {0*0,1*0,2*0,3*0},
    {0*1,1*1,2*1,3*1},
    {0*2,1*2,2*2,3*2},
    {0*3,1*3,2*3,3*3}
};

7 个答案:

答案 0 :(得分:25)

这是数组初始化语法,它只能在声明数组类型的变量时在右侧使用。例如:

int[] x = {1,2,3,4};
String y = {"a","b","c"};

如果您不在变量声明的RHS上,请改为使用数组构造函数:

int[] x;
x = new int[]{1,2,3,4};
String y;
y = new String[]{"a","b","c"};

这些声明具有完全相同的效果:使用指定的内容分配和构造新数组。

在您的情况下,以编程方式指定表可能实际上更清晰(重复性更低,但更简洁一点):

double[][] m = new double[4][4];

for(int i=0; i<4; i++) {
    for(int j=0; j<4; j++) {
        m[i][j] = i*j;
    }
}

答案 1 :(得分:2)

您可以通过在右侧的花括号中写下实际值来初始化数组,如:

String[] strArr = { "one", "two", "three"};
int[] numArr = { 1, 2, 3};

以同样的方式,二维数组或数组数组将数组保存为值,所以:

String strArrayOfArrays = { {"a", "b", "c"}, {"one", "two", "three"} };

您的示例恰好显示了

double m[][] = {
    {0*0,1*0,2*0,3*0},
    {0*1,1*1,2*1,3*1},
    {0*2,1*2,2*2,3*2},
    {0*3,1*3,2*3,3*3}
};

但是,数字的乘法也将被执行,它与:

相同
double m[][] = { {0, 0, 0, 0}, {0, 1, 2, 3}, {0, 2, 4, 6}, {0, 3, 6, 9} };

答案 2 :(得分:1)

double m[][]声明一个数组数组,所谓的多维数组。

m[0]指向大小为4的数组,包含0 * 0,1 * 0,2 * 0,3 * 0。 简单的数学表明这些值实际上是0,0,0,0。

第二行也是大小为4的数组,包含0,1,2,3。

等等......

我想你的书中的多种格式是显示0 * 0是第0行第0列,0 * 1是第0列第1列,依此类推。

答案 3 :(得分:1)

它被称为数组初始值设定项,可以在Java specification 10.6中进行解释。

这可用于初始化任何数组,但它只能用于初始化(不能分配给现有数组)。关于它的一个独特之处是可以从初始化器确定阵列的尺寸。其他创建阵列的方法需要您手动插入数字。在许多情况下,这有助于最大限度地减少程序员修改初始化程序并且无法更新维度时发生的琐碎错误。

基本上,初始化程序分配一个正确大小的数组,然后从左到右评估列表中的每个元素。规范还指出,如果元素类型是一个数组(例如它适用于你的情况......我们有一个double []数组),每个元素本身可能是一个初始化列表,这就是为什么你看到一个外套大括号,每条线都有内括号。

答案 4 :(得分:1)

如果您可以接受双重对象,则此帖子有用: Initialization of an ArrayList in one line

List<Double> y = Arrays.asList(null, 1.0, 2.0);
Double x = y.get(1);

答案 5 :(得分:0)

这是创建和初始化Java array的快捷语法。

答案 6 :(得分:0)

根据我的经验,当我想要数组中的固定值时,我会进行这种初始化。我在类中声明它,但在onCreate方法之外,因为它不允许我在onCreate中执行它。