1、1,第7章 多维数组,2,动 因,目前,你已经使用过一维数组来对线性的元素集合进行建模。你可以使用二维数组来表示矩阵或表格。例如:使用二维数组可以存储下面这个描述城市之间距离的表格。,3,学习目标,给出使用二维数组表示数据的例子(第7.1节)。 声明二维数组变量、创建数组以及使用行下标和列下标访问二维数组中的数组元素(第7.2节)。 编程实现常用的二维数组操作(显示数组、对所有元素求和、找出最小元素和最大元素以及随意打乱数组)(第7.3节)。 给方法传递二维数组 (第7.4节)。 使用二维数组编写多选题评分程序(第7.5节)。 使用二维数组解决距离最近点对问题 (第7.6节)。 使用二维数组检
2、测一种九宫格的解决方案(第7.7节) 使用多维数组(第7.8节)。,4,声明/创建二维数组变量,/ 声明数组引用变量 dataType refvar / 创建数组并将它的引用赋值给变量 refVar = new dataType1010; /声明和创建数组合放在一条语句中 dataType refVar = new dataType1010; /还可选择的语法 dataType refVar = new dataType1010;,5,声明二维数组变量 和创建二维数组,int matrix = new int1010;or int matrix = new int1010; matrix00
3、= 3;for (int i = 0; i matrix.length; i+)for (int j = 0; j matrixi.length; j+)matrixij = (int)(Math.random() * 1000);double x;,6,二维数组图解,array.length是多少? 4 array0.length是多少? 3,matrix.length是多少? 5 matrix0.length是多少? 5,7,使用简捷符号声明、创建和初始化,你也可以使用数组初始化语法来声明、创建和初 始化一个二维数组。例如:,int array = new int43; array00 =
4、 1; array01 = 2; array02 = 3; array10 = 4; array11 = 5; array12 = 6; array20 = 7; array21 = 8; array22 = 9; array30 = 10; array31 = 11; array32 = 12;,int array = 1, 2, 3,4, 5, 6,7, 8, 9,10, 11, 12 ;,等同于,8,二维数组的长度,int x = new int34;,9,二维数组的长度(续),int array = 1, 2, 3,4, 5, 6,7, 8, 9,10, 11, 12 ;,array.
5、length array0.length array1.length array2.length array3.length,array4.length ArrayIndexOutOfBoundsException,10,锯齿数组,二维数组中的每一行本身就是一个数组。因此,各行 的长度可以不同。这样的数组被称为锯齿数组。例如: int matrix = 1, 2, 3, 4, 5,2, 3, 4, 5,3, 4, 5,4, 5,5 ;,matrix.length 是 5 matrix0.length 是 5 matrix1.length 是 4 matrix2.length 是 3 matri
6、x3.length 是 2 matrix4.length 是 1,11,锯齿数组(续),12,处理二维数组,参见教材中的例子 (使用输入值初始化数组) (打印数组) (求所有元素的和) (对数组按列求和) (哪一行的和最大) (找出最大元素的最小下标) (随意打乱),13,使用输入值初始化数组,java.util.Scanner input = new Scanner(System.in); System.out.println(“Enter “ + matrix.length + “ rows and “ +matrix0.length + “ columns: “); for (int r
7、ow = 0; row matrix.length; row+) for (int column = 0; column matrixrow.length; column+) matrixrowcolumn = input.nextInt(); ,14,使用随机值初始化数组,for (int row = 0; row matrix.length; row+) for (int column = 0; column matrixrow.length; column+) matrixrowcolumn = (int)(Math.random() * 100); ,15,打印数组,for (int
8、row = 0; row matrix.length; row+) for (int column = 0; column matrixrow.length; column+) System.out.print(matrixrowcolumn + “ “);System.out.println(); ,16,求所有元素的和,int total = 0; for (int row = 0; row matrix.length; row+) for (int column = 0; column matrixrow.length; column+) total += matrixrowcolumn
9、; ,17,按行求和,for (int column = 0; column matrix0.length; column+) int total = 0;for (int row = 0; row matrix.length; row+)total += matrixrowcolumn;System.out.println(“Sum for column “ + column + “ is “ + total); ,18,随意打乱,for (int i = 0; i matrix.length; i+) for (int j = 0; j matrixi.length; j+) int i1
10、 = (int)(Math.random() * matrix.length);int j1 = (int)(Math.random() * matrixi.length);/ Swap matrixij with matrixi1j1int temp = matrixij;matrixij = matrixi1j1; matrixi1j1 = temp; ,19,给方法传递二维数组,PassTwoDimensionalArray,Run,20,问题:多选题测验评分,目标:编写一个程序对多选题的测验进行打分,GradeExam,Run,21,问题:找出距离最近的点对,FindNearestPo
11、ints,Run,22,九宫格是什么?,23,每一行包含数字 1 到 9,24,每一列包含数字 1 到 9,5 3,4,6,7,8,9,1,2,6,7,2,1 9 5,3,4,8,1,9 8,3,4,2,5,6,7,8,5,9,7,6,1,4,2,3,4,2,6,8,5,3,7,9,1,7,1,3,9,2,4,8,5,6,9,6,1,5,3,7,2,8,4,2,8,7,4 1 9,6,3,5,3,4,5,2,8,6,1,7 9,25,每个 33的盒子中包含数字 1到 9,5 3,4,6,7,8,9,1,2,6,7,2,1 9 5,3,4,8,1,9 8,3,4,2,5,6,7,8,5,9,7,
12、6,1,4,2,3,4,2,6,8,5,3,7,9,1,7,1,3,9,2,4,8,5,6,9,6,1,5,3,7,2,8,4,2,8,7,4 1 9,6,3,5,3,4,5,2,8,6,1,7 9,26,检测解决方案是否正确,Run,CheckSudokuSolution,27,多维数组,有时,你会需要表示 n维数组。在Java中,你可以创建 n维数组,其中n是任意整数。 对二维数组的声明以及二维数组的创建方法进行推广,用于声明n维数组变量和创建 n维数组,这里的 n = 3。例如:下面的语法声明一个三维数组变量scores,创建一个数组并将它的引用赋值给scores。double scores = new double1052;,28,问题:计算总分,目标:编写一个程序统计某个班学生的总分。假设分数都存储在一个叫做scores的三维数组中。scores的第一个下标代表学生,第二个下标代表考试,第三个代表考试的组成部分。假设有7个学生,5次考试,而每次考试都有多项选择和程序两部分。因此,scoresij0 表示学生i在考试j中的成绩。你的程序显示每个学生的总分。,TotalScore,Run,