使用多维数组以不同的顺序打印值

时间:2015-01-31 13:05:23

标签: java arrays multidimensional-array

我正在处理一个问题,我需要以下列格式打印N * N多维数组:如果N = 3,那么:

4 2 1
7 5 3
9 8 6
我坚持为此编写for循环。我无法获得逻辑或如何开始打印值。 我的代码:

    import java.util.Scanner;


public class Hotel {

public static void main(String[] args) {
    int N=1, x=1, y=0, f=1;
    Scanner in = new Scanner(System.in);
    System.out.println("Enter the size of square: ");
    x = in.nextInt();
    if (x>=1 && x<=100) {
        N = x;
    }
    y=N*N;
    int[][] arr = new int[N][N];

            arr[0][N-1] = f;
            arr[N-1][0] = y;
            for(int i=0; i<N;i++) {
                  for (int j=0;j<N;j++) {
                       -------------------------------

                        }
                  }


    for(int i=0; i<N;i++) {
          for (int j=0;j<N;j++) {
              System.out.print(arr[i][j] + " "); // Printing a 2d array
              }   
          System.out.println(" ");
      }

in.close();
    }

}

我的输出根据我的代码:

0 0 1
0 0 0
9 0 0

内部for循环,我无法获得逻辑。如果你可以帮助我提供一个逻辑,我会尝试解决它。请帮助

1 个答案:

答案 0 :(得分:2)

在解决这样的问题时,你应该以非常系统的方式思考你正在采取的步骤。基本上,你应该背诵你希望算法对自己采取的每一步,而不做任何推理&#39;。

所做的事情是:

&#34;好的,我把2放在中上部位置,所以现在我需要向右倾斜到右边。&#34;

您需要找到您想要做的模式。在这种情况下,您想要制作对角线数字,因此您需要检测何时开始新线。 你什么时候开始新的一行?当然,一旦完成当前的一个。线何时完成?当(x + 1,y + 1)没有合法点时,你当前的点是(x,y)。

因此,您的算法应该检测到这种情况,然后找到下一行的起始位置。你的下一行从哪里开始?如果您只存储上一个行的起点坐标,那么它应该比那些少一些。

您现在知道从哪里开始和结束您的线路,所以现在您只需要初始化和终止您的算法。

右上角的位置始终为1,因此您可以立即将其放入。你有一个额外的变量存储x-cooridnates,所以你需要将它设置为你的第一行&#39;的值,即N-1。现在,如上所述的算法将看到该行无法继续,并开始下一行。

您的算法何时终止?有几种方法可以做到这一点,但最简单的方法是简单地查看下一步要输入的数字。您的方格是N * N,因此应该是输入的最大数字。如果您检测到 输入的下一个号码将是N * N + 1,那么您就完成了。或者,你可以查看你的“x&#39;”,如果小于0,你将无法再写下任何值。