【问题标题】:Spiral Matrix in Anti-clockwise Direction逆时针方向的螺旋矩阵
【发布时间】:2021-08-07 19:20:19
【问题描述】:

我正在尝试以螺旋形式打印逆时钟方向的元素。

但我发现格式中缺少一个元素。

例如:

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

}

感谢您提供的反馈并感谢,,,

【问题讨论】:

  • 我不清楚输入的期望输出是什么。确保显示每一行。
  • 想要的输出如下:index 03,02,01,00, 10,20,30, 31,32,33, 23,13, 12,11, 21,22 ... . 我希望你明白这一点:)
  • 我认为这些是成对的索引。您的输出看起来不像逆时针螺旋。对我来说应该是4 3 2 1 5 14 13 12 6 15 16 11 7 8 9 10

标签: java matrix data-structures spiral


【解决方案1】:

问题是由于您的代码格式不正确造成的。如果您使用正确的缩进格式化代码,那么您会看到最后一个 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 }

更好的解决方案是对整个程序使用更好的格式。此外,您的班级名称中有错字,Spiral,而不是 Spiral。

【讨论】:

    猜你喜欢
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 2020-04-28
    相关资源
    最近更新 更多