详析二维数组
二维数组实质是行数个一维数组的拼接
创建二维数组
数据类型[][] 数组名; 数据类型 数组名[][];
初始化二维数组
//以数据类型为Int型为例第一种:int[][] arr = new int[行数][列数];第二种:int[][] arr = {{1,2,3}, {4,5,6}, {7,8,9}};int[][] arr = new int[3][];//这里数组长度没有,//null调任何东西都会抛出空指针异常System.out.println(arr); //栈内是门牌号,也就是数组名的地址System.out.println(arr[1][0]);//NullPointerException空指针异常System.out.println(arr[0]); //null//动态的为每一个一维数组分配空间arr[0] = new int[1];arr[1] = new int[2];arr[2] = new int[3];
获取二维数组元素值
//二维数组行、列的下标同一维数组一样也是从0开始//获取单个元素值arr[0][2];//表示获取二维数组第一行第三列的数据//遍历打印二维数组1.第一种方法:使用for i循环,通过拿下标值来遍历数组for(int i = 0; i < arr.length; i++){//遍历行for(int j = 0; j < arr[i].length; j++){//遍历列System.out.println(arr[i][j]);}}2.第二种方法:使用for each循环,遍历数组 * (1) 外层第一次循环,从数组中获取第0行 赋值给变量 内存第一圈循环,从数组中获取第0行所有列的元素值 * (2) 外层第二次循环,从数组中获取第1行 赋值给变量 内存第一圈循环,从数组中获取第1行所有列的元素值for(int[] row : arr){//拿到每一行for(int line : row){//拿到当前行的每一列,其实就是一位数组的遍历System.out.println(line);}}//获取整行元素int[][] arr = {{1,2,3}, {4,5,6}, {7,8,9}}Scanner scanner = new Scanner(System.in);System.out.println("当前数组只有" + arr.length + "行,请输入你要获取的行号:");int num = scan.nextInt();//获取从控制台输入的行号for (int j = 0; j < arr[number - 1].length; j++) {//行号固定,遍历列System.out.println("第" + number + "行的第[" + j + "]个元素的值是:" + arr[num - 1][j]); }//获取整列元素int[][] arr = {{1,2,3}, {4,5,6}, {7,8,9}}Scanner scanner = new Scanner(System.in);System.out.println("当前数组只有" + arr[0].length + "列,请输入你要获取的列号:");int num = scan.nextInt();//获取从控制台输入的列号for (int i = 0; i < arr.length; i++) { System.out.println("第 "+(i + 1)+"行的第["+ num +"]个元素的值是" + arr[i][num]);}
求两个矩阵乘积
第一个矩阵的列一定和第二个矩阵的行一样,如一个2x3的矩阵乘以一个3x4的矩阵,会得到一个2x4的矩阵
int[][] arr1 = {{1,2,3},{4,5,6}};//2*3的矩阵int[][] arr2 = {{1,2,3,5},{2,4,6,8},{1,2,3,4}};//3*4的矩阵int[][] arr = new int[arr1.length][arr2[0].length];//arr1 * arr2 会得到一个 2*4的新矩阵for (int i = 0; i < arr1.length; i++) {//arr1的行for (int j = 0; j < arr1[i].length; j++) {//arr1的列for(int k = 0; k < arr2[i].length; k++) {arr[i][k] = arr[i][k] + arr1[i][j] * arr2[j][k];}}}for(int i = 0; i < arr.length; i++){//遍历行for(int j = 0; j < arr[i].length; j++){//遍历列System.out.println(arr[i][j]);}}
求矩阵行之和
int[][] arr = {{1,2,3,5},{2,4,6,8},{1,2,3,4}};//3*4的矩阵for(int i = 0; i < arr.length; i++) {int sum = 0;for(int j = 0; j < arr[i].length; j++) {sum = sum + arr[i][j];}System.out.println("第" + (i + 1) + "行的和为" + sum);}
求矩阵列之和(只适合n * n 矩阵)
int[][] arr = {{1,2,3,4},{2,4,6,8},{1,2,3,4}};//3*4的矩阵for(int i = 0; i < arr[0].length; i++) {int sum = 0;for(int j = 0; j < arr.length; j++) {sum = sum + arr[j][i];}System.out.println("第" + (i + 1) + "列的和为" + sum);}
求主对角形之和(只适合n * n 矩阵)
int[][] arr = {{1,2,3,4},{2,4,6,8},{1,2,3,4},{1,2,3,4}};//3*4的矩阵int sum = 0;for(int i = 0; i < arr.length; i++) {for(int j = 0; j < arr[i].length; j++) {if(i == j) {sum = sum + arr[i][j];} }}System.out.println(sum);
求副对角形之和(只适合n * n 矩阵)
int[][] arr = {{1,2,3,4},{2,4,6,8},{1,2,3,4},{1,2,3,4}};//3*4的矩阵int sum = 0;for(int i = 0; i < arr.length; i++) {for(int j = 0; j < arr[i].length; j++) {if(i + j == arr.length) {sum = sum + arr[i][j];} }}System.out.println(sum);