二维数组

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();
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值