提问人:Debashis Baral 提问时间:9/2/2023 最后编辑:RobertDebashis Baral 更新时间:9/4/2023 访问量:34
解决螺旋二维矩阵问题时 java 中令人困惑的异常越界错误
A confusing exception out of bound error in java while solving a spiral 2d matrix question
问:
我正在解决这个问题,试图生成螺旋矩阵,但只有在矩阵的长度为奇数时才会反复出现错误。当长度均匀时,它工作正常
这是代码:
public class spiral {
public static void main(String[] args) {
int n = 5;
generateSpiralMat(n);
}
static void generateSpiralMat(int n) {
int[][] mat = new int[n][n] ;
int topRow =0, rightCol = n-1, bottonRow = n-1, leftCol = 0 ;
int num = 1 ;
while( num < n*n + 1 ) {
//topRow -> leftCol to rightCol
for(int i=leftCol; i<rightCol; i++) {
mat[topRow][i] = num;
num ++ ;
}
//rightCol -> topRow to bottomRow
for(int j =topRow; j<bottonRow; j++){
mat[j][rightCol] = num ;
num++ ;
}
//bottomRow -> rightCol to leftCol
for(int i=rightCol; i> leftCol; i--) {
mat[bottonRow][i] = num;
num++ ;
}
//leftCol -> bottomRow to topRow
for(int j=bottonRow; j>topRow; j--) {
mat[j][leftCol] = num ;
num ++ ;
}
topRow += 1 ;
bottonRow -= 1 ;
leftCol += 1 ;
rightCol -= 1 ;
}
printMat(mat);
}
static void printMat(int[][] mat) {
for(int i=0; i< mat.length; i++) {
for(int j=0; j< mat[i].length; j++) {
System.out.print( mat[i][j] + " ");
}
System.out.println();
}
}
}
偶数长度矩阵运行良好,但代码仅在运行时显示奇数长度矩阵的错误
我期望代码会根据给定的问题生成一个螺旋矩阵。
答:
1赞
Marce Puente
9/2/2023
#1
void spiral( int side ) {
int matriz[][] = new int[ side ][ side ];
int length = side * side;
int count = 0;
int top = side - 1;
int floor = 0;
int sector = 0;
int j = 0, k = 0;
for( int i = 0; i < length; i++ ) {
matriz[ j ][ k ] = count;
switch( sector ) {
case 3: j--;
if( j == floor ) {
sector = 0;
top -= 1;
}
break;
case 2: k--;
if( k == floor ) {
floor++;
sector++;
}
break;
case 1: j++;
if( j == top ) {
sector++;
}
break;
case 0: k++;
if( k == top ) {
sector++;
}
break;
}
count++;
}
}
我们将操作分为四个阶段:
A) 在列中前进 B) 在行中前进
C) 在列
中返回 D) 在达到相应限制
时返回行,它进入下一个扇区,在扇区“3”中修改上限,在“2”中修改下限。
评论
num
num
leftCol
rightCol
for(int i=leftCol; i<rightCol; i++)
leftCol += 1
rightCol -= 1
leftCol = 2
rightCol = 3
leftCol
-2147483648
)