二維數組

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章