1. 二维数组的基本知识
1.1 声明二维数组变置并创建二维数组
下面是声明二维数组的语法:
数据类型[ ][ ]数组名 ;
例:声明 int 型的二维数组变量 matrix:
int[ ][ ] matrix;
警告: 使用 matrix[2,l] 访问行下标为 2、 列下标为1的元素是一种常见错误。 在 Java 中,每个下标必须放在一对方括号中
1.2 获取二维数组的长度
二维数组实际上是一个数组, 它的每个元素都是一个一维数组。 数组 X 的长度是数组中元素的个数, 可以用 x.length 获取该值。 元素 x[0], x[l], … , x[x.length-l] 也是数组。可以使用 x[0].length, x[l].length, … , x[x.length-1] .length 获取它们的长度
如下图所示:
1.3 锯齿数组
二维数组中的每一行本身就是一个数组, 因此, 各行的长度就可以不同。 这样的数组称为锯齿数组(ragged array)。 下面就是一个创建锯齿数组的例子:
2. 处理二维数组
2.1 遍历二维数组
for (int i = 0; i < matrix.length; i++) { //行数
for (int j = 0; j < matrix[i].length; j++) { //列数
System.out.print(matrix[i][j]+" ");
}
}
2.2 求二维数组各列的和
思路:固定列号,遍历每一行该列元素 求出列和 两层for循环 外层控制列数,内层控制行数。
package twoArray;
//求矩阵中各列数字的和
import java.util.Scanner;
public class Class35 {
public static void main(String[] args) {
//用户输入指定的行列
Scanner sc=new Scanner(System.in);
System.out.print("请输入行列:");
int row=sc.nextInt();//行
int col=sc.nextInt();//列
double [][] matrix=new double[row][col];
for (int i = 0; i < matrix.length; i++) { //行数
for (int j = 0; j < matrix[i].length; j++) { //列数
matrix[i][j]=sc.nextDouble();
}
}
for (int j = 0; j < col; j++) {
double sum=0;
for(int i = 0; i < row; i++){
sum+=matrix[i][j]; //求列和
}
System.out.println(j+" cols's sum is "+sum);
}
}
}
2.3 二维数组哪一行最大
思路:1.输入数组行数 列数 给数组传入元素
2.假设第一行和最大 求出第一行元素的和
3.遍历数组其他行 求出行的和与第一行比较 如果大就更新行和与下标
4.打印行和与索引
package twoArray;
//行最大
import java.util.Scanner;
public class MaxRow {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.print("请输入行列:");
int row=sc.nextInt();
int col=sc.nextInt();
int arr[][]=new int[row][col];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j]=sc.nextInt();
}
}
maxRow(arr);
}
public static void maxRow(int arr[][]){
int maxRow=0; //最大行数和
int maxIndex=0; //最大行索引
for (int i = 0; i < arr[0].length; i++) {
maxRow+=arr[0][i];
}
for (int i = 1; i < arr.length; i++) {
int sum=0;
for (int j = 0; j < arr[i].length; j++) {
sum+=arr[i][j];
}
if(sum>maxRow){
maxRow=sum;
maxIndex=i;
}
}
System.out.println("最大行数和为"+maxRow+"最大行数为:"+maxIndex);
}
}
2.4 矩阵的转置
思路:转置矩阵的行是原矩阵的列 列为行,遍历新数组,将原数组的元素赋值给新数组,注意:原数组元素应是arr[j][i]
也就是转置过的元素值。
package twoArray;
//矩阵的转置
import java.util.Scanner;
public class Over {
public static void main(String[] args) {
//用户输入指定的行列
Scanner sc=new Scanner(System.in);
System.out.print("请输入行列:");
int row=sc.nextInt();//行
int col=sc.nextInt();//列
double [][] matrix=new double[row][col];
for (int i = 0; i < matrix.length; i++) { //行数
for (int j = 0; j < matrix[i].length; j++) { //列数
matrix[i][j]=sc.nextDouble(); //将输入的值放进数组中
}
}
change(matrix);
}
public static void change(double[][] matrix){
//定义转置矩阵 转置矩阵的行 为旧矩阵的列 列为行
double newArr[][]=new double[matrix[0].length][matrix.length];
//遍历新数组
for (int i = 0; i < newArr.length; i++) {
for (int j = 0; j < newArr[i].length; j++) {
newArr[i][j]=matrix[j][i]; //将旧矩阵的元素赋值给新矩阵
System.out.print(newArr[i][j]+" ");
}
System.out.println();
}
}
}
2.5 打乱二维数组
思路:生成随机行列,将随机行列元素值与原数组元素值交换,便实现了数组的打乱。
package twoArray;
//打乱数组顺序
import java.util.Scanner;
public class UpSet {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.print("请输入行列:");
int row=sc.nextInt();
int col=sc.nextInt();
int arr[][]=new int[row][col]; //定义二维数组
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j]=sc.nextInt(); //给二维数组传入值
}
}
upSet(arr); //调用方法
}
public static void upSet(int arr[][]){
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
int i1=(int)(Math.random()*arr.length); //生成随机行
int j1=(int)(Math.random()*arr[i].length); //生成随机列
//打乱数组
int temp=arr[i][j];
arr[i][j]=arr[i1][j1];
arr[i1][j1]=temp;
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
2.6 矩阵的乘法
public class MatrixMutil{
public static void main(String args[]){
int[][] arr = new int[][]{
{1,2,3},
{4,5,6}
};
int[][] arr1 = new int[][]{
{1,4},
{2,5},
{3,6}
};
int[][] newarr = new int[arr.length][arr1[0].length];
for(int i=0;i<newarr.length;i++){
for(int j=0;j<newarr[i].length;j++){
int sum=0;
for(int k=0;k<arr1.length;k++){
sum+=arr[i][k]*arr1[k][j];
}
newarr[i][j]=sum;
System.out.print(newarr[i][j]+" ");
}
System.out.println();
}
}
}