Java基础之(十二)二维数组

说明
Java中数组类型是引用类型,因此数组变量其实是一个引用,这个引用指向真实的数组内存。数组元素的类型也可以是引用。
回到前面定义数组类型的语法:
type[] arrayName,这是典型的一维数组的定义语法,其中type是数组元素的类型。如果希望数组元素也是一个引用,而且是指向int数组的引用,则可以把type定义成int[],那么上面的语法就变成int[][] arrayName。

声明二维数组变量

下面是声明二维数组的语法:

type[][] arrayName;

二维数组的初始化

1.静态初始化

int[][] intArray = {{1,2},{2,3},{3,4,5}};

2.动态初始化
1) 直接为每一维分配空间,格式如下:

//创建一个4行3列的二维数组
int[][] matrix = new int[4][3];

二维数组中使用两个下标,一个表示行,一个表示列。同一维数组一样,每个下标都是int型的,从0开始。如图所示,要将7赋值给第二行第一列的特定元素,可以使用下面的语句:

matrix[2][1] = 7;

这里写图片描述

2)二维简单数据类型数组的动态初始化如下:

 int a[ ][ ] = new int[2][ ];
    a[0] = new int[3];
    a[1] = new int[5];

获取二维数组的长度

二维数组实际上是一个数组,它的每个元素实际上都是一个一维数组。数组x的长度是数组中元素的个数,可以用x.length获取该值,元素x[0],x[1],…,x[x.length-1]也是数组,可以使用x[0].length,x[1].length,… ,x[x.lenth-1]来获取它们的长度。
例如,假设x = new int[4][3]。如下图所示:
这里写图片描述

锯齿数组

二维数组中的每一行本身就是一个数组,因此,各行的长度就可以不同。这样的数组称为锯齿数组。下面就是一个创建锯齿数组的例子:

int[][] triangleArray = {
{1,2,3,4,5}
{2,3,4,5}
{3,4,5}
{4,5}
{5}
};

可以知道,triangleArray[0].length的值是5;triangleArray[1].length的值是4;triangleArray[2].length的值是3;triangleArray[3].length的值是2;triangleArray[4].length的值是1;

处理二维数组

假设如下创建数组:

int[][] matrix = new int[10][10];

下面是一些处理二维数组的例子:

1) 使用输入值初始化数组:

int[][] matrix = new int[3][4];
Scanner input = new Scanner(System.in);
System.out.println("Enter "+ matrix.length+" row and "+ matrix[0].length
                +" columns: ");
for(int row = 0;row < matrix.length;row++){
            for(int column = 0;column < matrix[row].length;column++){
                matrix[row][column] = input.nextInt();
            }
        }

2) 使用随机值初始化数组:

System.out.println("Enter "+ matrix.length+" row and "+ matrix[0].length
                +" columns: ");
for(int row = 0;row < matrix.length;row++){
        for(int column = 0;column < matrix[row].length;column++){
                matrix[row][column] = (int)(Math.random()*100);
            }
        }

3) 打印数组:

for(int row = 0;row < matrix.length;row++){
        for(int column = 0;column < matrix[row].length;column++){
            System.out.println(" "+matrix[row][column]);
            }
            System.out.println();
        }

4) 求所有元素的和:

int sum = 0;
System.out.println("Enter "+ matrix.length+" row and "+ matrix[0].length
                +" columns: ");
    for(int row = 0;row < matrix.length;row++){
        for(int column = 0;column < matrix[row].length;column++){
            matrix[row][column] = (int)(Math.random()*10);
            sum += matrix[row][column];
            }
        }

5) 对数组按列求和:

for(int column = 0;column < matrix[0].length;column++){
            int total = 0;
            for(int row = 0;row < matrix.length;row++){
                matrix[row][column] = (int)(Math.random()*10);
                total += matrix[row][column];
            }
            System.out.println("Sum of column "+ column + " is " + total);
        }

6) 计算哪一行的和最大?

int maxRow = 0;
int indexOfMaxRow = 0;

for(int column = 0;column < matrix[0].length;column++){
            maxRow += matrix[0][column];
        }

for(int row = 1;row < matrix.length;row++){
        int totalOfThisRow = 0;
        for(int column = 0;column < matrix[row].length;column++){
                totalOfThisRow += matrix[row][column];

                if(totalOfThisRow > maxRow){
                    maxRow = totalOfThisRow;
                    indexOfMaxRow = row;
                }
            }
        }
        System.out.println("Row "+ indexOfMaxRow+" has the max sum is: "+ maxRow);

7) 打乱数组(每个元素都打乱)

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

                int i1 = (int)(Math.random()*matrix.length);
                int j1 = (int)(Math.random()*matrix[i].length);
                int temp = matrix[i][j];
                matrix[i][j] = matrix[i1][j1];
                matrix[i1][j1] = temp;

            }
        }

8) 打乱数组(打乱二维数组中的一维数组)

private static void shuffle(int[][] array) {
        // TODO Auto-generated method stub
        for(int i = 0;i < array.length;i++){
                int row = (int)(Math.random()*array.length);
                 int[] temp = array[i];
                    array[i] = array[row];
                    array[row] = temp;
            }
        }

给方法传递二维数组

可以向传递一维数组一样,给方法传递二维数组。下列程序给出一个返回二维数组中所有元素之和的方法:

public class Exercise7_2 {

    public static void main(String[] args){

        Scanner input = new Scanner(System.in);
        int[][] m = new int[4][3];
        System.out.print("Enter "+ m.length + " row "+ m[0].length
                + " column : ");

        for(int row = 0;row < m.length;row++){
            for(int column = 0;column < m[0].length;column++){
                m[row][column] = input.nextInt();
            }
        }

        System.out.println("\nSum of all elements is "+sum(m));
    }

    private static int sum(int[][] m) {
        // TODO Auto-generated method stub
        int total = 0;
        for(int i = 0;i < m.length;i++){
            for(int j = 0;j < m[0].length;j++){
                total += m[i][j];
            }
        }
        return total;
    }
}
输出结果:
Enter 4 row 3 column : 
1 2 3
4 5 6
7 8 9
1 2 3

Sum of all elements is 51
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值