逆时针方向的螺旋矩阵
Spiral Matrix in Anti-clockwise Direction
我正在尝试以螺旋形式在逆时钟方向打印元素。
但格式中缺少一个元素。
例如:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
从 4 开始,
而不是实际输出:4 3 2 1 5 9 13 14 15 16 12 8 7 6 10 11
我得到:4 3 2 1 5 9 13 14 15 16 8 7 6 10 11
此外,如果你有
,谁能给我一个优化的解决方案
这是我的代码:
public class Sprial_Matrix {
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
int m=4;
int n=4;
System.out.println("Elements: ");
int arr[][] = new int[m][n];
for(int i=0;i<m;i++) {
for(int j=0;j<n;j++) {
arr[i][j]=s.nextInt();
}
}
int k=0,l=0;
while(k<m && l<n) {
for(int i=n-1;i>=l;i--) {
System.out.print(arr[k][i]+" ");
}
k++;
for(int i=k;i<m;i++ ) {
System.out.print(arr[i][l]+" ");
}
l++;
if(k<m) {
for(int i=l;i<=m-1;i++)
System.out.print(arr[m-1][i]+" ");
}
m--;
}
if(l<n) {
for(int i=m-1;i>=l;i--) {
System.out.print(arr[i][n-1]+" ");
}
n--;
}
s.close();
}
}
感谢您提供的反馈并感谢,
问题是由您的代码格式不正确引起的。如果您使用正确的缩进格式化代码,那么您会看到最后一个 if
语句实际上在 while
循环之外:
if(k<m) {
for(int i=l;i<=m-1;i++) // There is no { on this line!
System.out.print(arr[m-1][i]+" ");
} // So this } closes the 'if', not 'for'
m--;
} // And this } closes the 'while', not 'if'
if(l<n) { // So this 'if' is outside the loop.
for(int i=m-1;i>=l;i--) {
System.out.print(arr[i][n-1]+" ");
}
n--;
}
简单的解决方法是执行以下操作:
if(k<m) {
for(int i=l;i<=m-1;i++) { // FIX: added {
System.out.print(arr[m-1][i]+" ");
}
m--;
}
if(l<n) {
for(int i=m-1;i>=l;i--) {
System.out.print(arr[i][n-1]+" ");
}
n--;
}
} // FIX: added }
更好的解决方案是对整个程序使用更好的格式。此外,您的 class 名称中有一个拼写错误,Spiral,而不是 Spiral。
我正在尝试以螺旋形式在逆时钟方向打印元素。
但格式中缺少一个元素。
例如:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
从 4 开始, 而不是实际输出:4 3 2 1 5 9 13 14 15 16 12 8 7 6 10 11
我得到:4 3 2 1 5 9 13 14 15 16 8 7 6 10 11
此外,如果你有
,谁能给我一个优化的解决方案这是我的代码:
public class Sprial_Matrix {
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
int m=4;
int n=4;
System.out.println("Elements: ");
int arr[][] = new int[m][n];
for(int i=0;i<m;i++) {
for(int j=0;j<n;j++) {
arr[i][j]=s.nextInt();
}
}
int k=0,l=0;
while(k<m && l<n) {
for(int i=n-1;i>=l;i--) {
System.out.print(arr[k][i]+" ");
}
k++;
for(int i=k;i<m;i++ ) {
System.out.print(arr[i][l]+" ");
}
l++;
if(k<m) {
for(int i=l;i<=m-1;i++)
System.out.print(arr[m-1][i]+" ");
}
m--;
}
if(l<n) {
for(int i=m-1;i>=l;i--) {
System.out.print(arr[i][n-1]+" ");
}
n--;
}
s.close();
}
}
感谢您提供的反馈并感谢,
问题是由您的代码格式不正确引起的。如果您使用正确的缩进格式化代码,那么您会看到最后一个 if
语句实际上在 while
循环之外:
if(k<m) {
for(int i=l;i<=m-1;i++) // There is no { on this line!
System.out.print(arr[m-1][i]+" ");
} // So this } closes the 'if', not 'for'
m--;
} // And this } closes the 'while', not 'if'
if(l<n) { // So this 'if' is outside the loop.
for(int i=m-1;i>=l;i--) {
System.out.print(arr[i][n-1]+" ");
}
n--;
}
简单的解决方法是执行以下操作:
if(k<m) {
for(int i=l;i<=m-1;i++) { // FIX: added {
System.out.print(arr[m-1][i]+" ");
}
m--;
}
if(l<n) {
for(int i=m-1;i>=l;i--) {
System.out.print(arr[i][n-1]+" ");
}
n--;
}
} // FIX: added }
更好的解决方案是对整个程序使用更好的格式。此外,您的 class 名称中有一个拼写错误,Spiral,而不是 Spiral。