Java基础之(十二)二维数组
2016-07-30 19:14
363 查看
说明
Java中数组类型是引用类型,因此数组变量其实是一个引用,这个引用指向真实的数组内存。数组元素的类型也可以是引用。
回到前面定义数组类型的语法:
type[] arrayName,这是典型的一维数组的定义语法,其中type是数组元素的类型。如果希望数组元素也是一个引用,而且是指向int数组的引用,则可以把type定义成int[],那么上面的语法就变成int[][] arrayName。
2.动态初始化
1) 直接为每一维分配空间,格式如下:
二维数组中使用两个下标,一个表示行,一个表示列。同一维数组一样,每个下标都是int型的,从0开始。如图所示,要将7赋值给第二行第一列的特定元素,可以使用下面的语句:
2)二维简单数据类型数组的动态初始化如下:
例如,假设x = new int[4][3]。如下图所示:
可以知道,triangleArray[0].length的值是5;triangleArray[1].length的值是4;triangleArray[2].length的值是3;triangleArray[3].length的值是2;triangleArray[4].length的值是1;
下面是一些处理二维数组的例子:
1) 使用输入值初始化数组:
2) 使用随机值初始化数组:
3) 打印数组:
4) 求所有元素的和:
5) 对数组按列求和:
6) 计算哪一行的和最大?
7) 打乱数组(每个元素都打乱)
8) 打乱数组(打乱二维数组中的一维数组)
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
相关文章推荐
- 第2章 Java编程基础——FAQ2.25 如何实现一维和二维数组的遍历?
- Java基础学习笔记(十二)I/O 缓冲流
- JAVA基础必备(十二)—— 反射(一)
- Java Script基础(十二) 正则表达式
- 黑马程序员————java基础--------二维数组及面向对象(一)
- java基础巩固训练营【第一轮】(十二) 我们一起来找茬 补
- Java基础---Java中的二维数组(三十四)
- Java基础 二维数组 面向对象(1)
- 黑马程序员----------java基础知识(6)之数组查找和二维数组及其应用
- java基础巩固系列(十二):java正则表达式入门以及Pattern、Matcher类详解
- Java 基础一些代码练习笔记(Array二维数组)
- Java基础(十二)——IO流
- java基础整理十二(多线程2)
- Java基础回顾_二维数组计算班级学生成绩_简单
- 黑马程序员_java编程基础第4天数组 二维数组
- Java培训笔记十二(中信的Java基础归纳)
- Java基础二维数组代码实例
- 黑马程序员_毕向东_Java基础视频教程学习笔记(十二)
- 十二、Java基础---------异常处理机制
- Java基础---Java中的二维数组(三十四)