当前位置: 首页 > 图文教程 > Java技术 > Java基础 > Java基础:小编谈java多维数组

Java基础
java基础:小编浅谈java对象
Java基础:孙鑫谈Java中文乱码问题产生原因分析(一)
Java基础:孙鑫谈Java中文乱码问题产生原因分析(二)
Java基础:小编谈JDBC
Java基础:小编详谈Java编码规则并不是老生常谈
Java基础:小编详谈AOP概念
Java基础:小编谈java多维数组
Java基础:小编谈Javascript之DOM的使用(25条)
Java基础:小编杂谈动态语言
Java基础:程序员之家七月份Java基础总结
Java基础:XHTML中css+div布局(经典8条)
Java基础:小编浅谈Spring基于三大模板的Web表示层技术
Java基础:浅谈多线程那点事
Javai基础:浅谈封装的那些事
Java基础:小编浅谈JavaScript中自定义函数那些事
Java基础:小编谈JavaScript中使用原型来创建对象
Java基础:CSS那些事
Java基础:小编对JavaScript的一些认识
Java基础:小编浅谈JavaScript与Java区别何在
Java基础:小编谈继承的语法

Java基础:小编谈java多维数组


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 80 ::
收藏到网摘: n/a

今天和大家探讨多维数组,本文章主要是以举例子的形式和大家讲述多维数组。

Java里可以方便地创建多维数组:

//: MultiDimArray.java

// Creating multidimensional arrays.

import java.util.*;

 

public class MultiDimArray {

  static Random rand = new Random();

  static int pRand(int mod) {

    return Math.abs(rand.nextInt()) % mod + 1;

  }

  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++)

        prt("a1[" + i + "][" + j +

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

    // 3-D array with 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++)

          prt("a2[" + i + "][" +

              j + "][" + k +

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

    // 3-D array with varied-length vectors:

    int[][][] a3 = new int[pRand(7)][][];

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

      a3[i] = new int[pRand(5)][];

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

        a3[i][j] = new int[pRand(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++)

          prt("a3[" + i + "][" +

              j + "][" + k +

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

    // Array of non-primitive 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++)

        prt("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++)

        prt("a5[" + i + "][" + j +

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

  }

  static void prt(String s) {

    System.out.println(s);

  }

} ///:~

 

用于打印的代码里使用了length,所以它不必依赖固定的数组大小。

第一个例子展示了基本数据类型的一个多维数组。我们可用花括号定出数组内每个矢量的边界:

 

int[][] a1 = {

{ 1, 2, 3, },

{ 4, 5, 6, },

};

 

每个方括号对都将我们移至数组的下一级。

第二个例子展示了用new分配的一个三维数组。在这里,整个数组都是立即分配的:

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

但第三个例子却向大家揭示出构成矩阵的每个矢量都可以有任意的长度:

 

 

    int[][][] a3 = new int[pRand(7)][][];

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

      a3[i] = new int[pRand(5)][];

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

        a3[i][j] = new int[pRand(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里置了一个有趣的值。