亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

遍歷大型 7*7 矩陣內的 3* 3 子矩陣時綁定異常錯誤的數組索引

遍歷大型 7*7 矩陣內的 3* 3 子矩陣時綁定異常錯誤的數組索引

慕碼人2483693 2023-06-28 15:23:40
我想從中間元素(第 2 行,第 2 列)的 (1,1) 起始位置遍歷一個大 7*7 矩陣內的 3*3 子矩陣。位置 (1,1) 對應的子矩陣將是                [(0,1),(0,2),(0,3)]                 [(1,1),(1,2),(1,3)]                 [(2,1),(2,2),(2,3)]像這樣遍歷將繼續..下一個子矩陣起始位置將是 (1,2)                 [(0,2),(0,3),(0,4)]                  [(1,2),(1,3),(1,4)]                  [(2,2),(2,3),(2,4)]我的代碼static int i;static int j;static int g;static int h;static void submatrix(int p,int q,int[][] mat) {System.out.print("Submatrix for : ");System.out.println(p+","+q);shiftmatrix(p,q,mat);}static void shiftmatrix(int p,int q,int[][] mat) { int m,n; int[][] d = new int[3][3]; for( m=0;m<3;m++) {  for( n=0;n<3;n++) {   p=m+(p-1);   q=n+q;   d[m][n]=mat[p][q];     }   }System.out.println("Your 3*3 SubMatrix is : ");    for ( m = 0; m < 3; m++){    for ( n = 0; n < 3; n++){        System.out.print(d[m][n]+"\t");        }         System.out.println();        }}public static void main(String[] args) {    int[][] a = new int[7][7];    int[][] mat = new int[7][7];    for ( i = 0; i < 7; i++)      {       for ( j = 0; j < 7; j++){          Random rand = new Random();           a[i][j] = rand.nextInt(10);          }      }//copying large matrix to another for passing by argument  System.out.println("Copied matrix is : "); for (i = 0; i < 7; i++){     for (j = 0; j < 7; j++){          mat[g][h]=a[i][j];            System.out.print(mat[g][h]+"\t");        }          System.out.println();    }//Here is the 3*3 submatrix traversing starts... for (i=1;i<6;i++) {   for (j=1;j<5;j++) {    int p=i;     int q=j;     submatrix(p,q,mat);     }  }}}運行此代碼時出現錯誤ArrayIndexOutOfBoundsException: -1 請幫忙
查看完整描述

1 回答

?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

您的代碼IndexOutOfBoundsException中的 是您調用的p = m + (p - 1)。您不需要在循環的每次迭代中更改p和變量。q

此外,您還有幾個不必要的變量,其中一些是靜態的,當您僅在這樣的循環中使用它們時應該避免這種情況。在清理代碼的格式并刪除所有不必要的變量之后,我相信代碼可以按照您的要求運行。

該代碼忽略隨機矩陣的第一行和第一列。這是期望的行為嗎?

import java.util.Random;


public class MatrixTest {


    public static void subMatrix(int startRow, int startCol, int[][] mat) {


        System.out.print("Submatrix for : ");

        System.out.println(startRow + ", " + startCol);

        shiftMatrix(startRow, startCol, mat);

    }


    public static void shiftMatrix(int startRow, int startCol, int[][] mat) {

        int[][] d = new int[3][3];

        for (int i = 0; i < 3; i++) {

            for (int j = 0; j < 3; j++) {

                //to properly move within the 3x3 you only need to add a 

                //constant buffer to the indices of mat[][]

                d[i][j] = mat[i + startRow][j + startCol]; 

            }

        }

        System.out.println("Your 3*3 SubMatrix is : ");

        for (int i = 0; i < 3; i++) {

            for (int j = 0; j < 3; j++) {

                System.out.print(d[i][j] + "\t");

            }

            System.out.println();

        }

    }

    public static void main(String[] args) {


        int[][] mat = new int[7][7];

        for (int i = 0; i < 7; i++) {

            for (int j = 0; j < 7; j++){

                Random rand = new Random();

                mat[i][j] = rand.nextInt(10);

            }

        }


        //copying large matrix to another for passing by argument 


        System.out.println("Copied matrix is : ");

        for (int i = 0; i < 7; i++){

            for (int j = 0; j < 7; j++) {

                System.out.print(mat[i][j] + "\t");

            }

            System.out.println();

        }

        //Here is the 3*3 submatrix traversing starts...


        for (int i = 1; i < 5; i++) { //changed from i < 6 to i < 5 to stay inside 7x7

            for (int j = 1; j < 5; j++) {

                subMatrix(i, j, mat);

            }

        }

    }

}


查看完整回答
反對 回復 2023-06-28
  • 1 回答
  • 0 關注
  • 178 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號