如何在 Java 中创建多维数组

在 Java 中创建多维数组也很方便:

 

//:c04:MultiDimArray.java

// Creatingmultidimensional arrays.

import com.bruceeckel.simpletest.*;

import java.util.*;

 

public   class MultiDimArray {

static Test monitor = new Test();

static Random rand =    new Random();

public   static     void main(String[] args) {

int[][] a1 = {

      { 1, 2, 3, },

      { 4, 5, 6, },

    };

for(int i = 0; i < a1.length; i++)

for(int j = 0; j < a1[i].length; j++)

        System.out.println( 

"a1[" + i + "][" + j + "] = " + a1[i][j]);

// 3-D arraywith fixed length:

int[][][] a2 = new       int[2][2][4];

for(int i = 0; i < a2.length; i++)

for(int j = 0; j < a2[i].length; j++)

for(int k = 0; k < a2[i][j].length; k++)

          System.out.println("a2[" + i + "][" + j + "][" +

            k + "] = " + a2[i][j][k]);

// 3-D arraywith varied-length vectors:

int[][][] a3 = new       int[rand.nextInt(7)][][];

for(int i = 0; i < a3.length; i++) {

      a3[i] = new   int[rand.nextInt(5)][];

for(int j = 0; j < a3[i].length; j++)

       a3[i][j] =      new int[rand.nextInt(5)];

    }

for(int i = 0; i < a3.length; i++)

for(int j = 0; j < a3[i].length; j++)

for(int k = 0; k < a3[i][j].length; k++)

          System.out.println("a3[" + i + "][" + j + "][" +

            k + "] = " + a3[i][j][k]);

// Array ofnonprimitive objects:

    Integer[][] a4 = {

      {     new Integer(1),    new Integer(2)},

      {     new Integer(3),    new Integer(4)},

      {     new Integer(5),    new Integer(6)},

    };

for(int i = 0; i < a4.length; i++)

for(int j = 0; j < a4[i].length; j++)

        System.out.println("a4[" + i + "][" + j +

"] =" + a4[i][j]);

    Integer[][] a5;

    a5 = new Integer[3][];

for(int i = 0; i < a5.length; i++) {

      a5[i] = new Integer[3];

for(int j = 0; j < a5[i].length; j++)

        a5[i][j] =      new Integer(i * j);

    }

for(int i = 0; i < a5.length; i++)

for(int j = 0; j < a5[i].length; j++)

        System.out.println("a5[" + i + "][" + j +

"] =" + a5[i][j]);

// Output test

int ln = 0;

for(int i = 0; i < a3.length; i++) 

for(int j = 0; j < a3[i].length; j++)

for(int k = 0; k < a3[i][j].length; k++)

          ln++;

    monitor.expect(new Object[] {

"a1[0][0]= 1",

"a1[0][1]= 2",

"a1[0][2]= 3",

"a1[1][0]= 4",

"a1[1][1]= 5",

"a1[1][2]= 6",

new TestExpression(

"%%a2\\[\\d\\]\\[\\d\\]\\[\\d\\] = 0", 16),

new TestExpression(

"%%a3\\[\\d\\]\\[\\d\\]\\[\\d\\] = 0", ln),

"a4[0][0]= 1",

"a4[0][1]= 2",

"a4[1][0]= 3",

"a4[1][1]= 4",

"a4[2][0]= 5",

"a4[2][1]= 6",

"a5[0][0]= 0",

"a5[0][1]= 0",

"a5[0][2]= 0",

"a5[1][0]= 0",

"a5[1][1]= 1",

"a5[1][2]= 2",

"a5[2][0]= 0",

"a5[2][1]= 2",

"a5[2][2]= 4"

    });

  }

}   ///:~

 

注意打印部分的代码中使用了 length,所以它不会依赖于固定数组的大小。

 

第一个例子演示了基本数据类型的多维数组。你可用花括号标出数组中的每个向量:

 

int[][] a1 = {

      { 1, 2, 3, },

      { 4, 5, 6, },

    };

 

每对方括号都会帮你访问下一级数组。

第二个例子用new 分配了一个三维数组。这里整个数组分配是一次完成的:

 

int[][][] a2 = new      int[2][2][4];

 

第三个例子表明,数组中用以构成矩阵的那些向量可以有任意的长度:

 

int[][][] a3 = new      int[rand.nextInt(7)][][];

for(int i = 0; i < a3.length; i++) {

      a3[i] = new   int[rand.nextInt(5)][];

for(int j = 0; j < a3[i].length; j++)

       a3[i][j] =      new    int[rand.nextInt(5)];

    }

 

第一个 new 创建了数组,其第一维的长度是由随机数确定的,其他维的长度则没有定义。

位于 for 循环内的第二个 new 则会决定第二维的长度,直到碰到第三个 new,第三维的长度

才得以确定。

 

通过输出结果可见:如果没有明确指定初始化值,数组值就会自动置为零。

 

你可以用类似的方式处理非基本类型的对象数组。第四个例子演示了用花括号把多个                new

表达式组织到一起的能力:

 

    Integer[][] a4 = {

      {     new Integer(1),    new Integer(2)},

      {     new Integer(3),    new Integer(4)},

      {     new Integer(5),    new Integer(6)},

    };

 

第五个例子展示了如何逐步创建非基本类型的对象数组:

 

    Integer[][] a5;

    a5 = new Integer[3][];

for(int i = 0; i < a5.length; i++) {

      a5[i] = new Integer[3];

for(int j = 0; j < a5[i].length; j++)

        a5[i][j] =      new Integer(i*j);

    }

i*j 只是为了在 Integer里放入一个有趣的值。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值