Java 二维数组语法环绕边框

Java Two-Dimensional Array Syntax Wrapping Borders

我正在 Java 中创建一个二维数组,它从用户那里读取一个数字并制作一个该大小的网格。要启动数组,我想在顶行的中间放置一个 1。我们将其称为 K。在放置 K 之后,我想将 K+1 放在右边并向上环绕边界。但是,如果右边和上面的位置已经被填满,或者它在右上角,那么你必须直接移动到下面的位置。下面是遵循这些步骤的 7x7 网格示例。

30 39 48 1 10 19 28

38 47 7 9 18 27 29

46 6 8 17 26 35 37

5 14 16 25 34 36 45

13 15 24 33 42 44 4

21 23 32 41 43 3 12

22 31 40 49 2 11 20

我尝试了几种不同的方法,但无法想出正确的解决方案。我有一种感觉,div 和 mods 以某种方式用于此,但我无法弄清楚。如果有人想要一个好的挑战,那就是它哈哈!

我已经根据您的规格编写了代码,并展示了流程中每个点的网格外观。它没有按照您的预期结果出现...所以要么您没有正确描述规则,要么您的“预期输出”写错了。

这是我的代码:

import java.util.Scanner;
import java.text.DecimalFormat; 

class Main {
 
  public static void main(String[] args) {   
    Scanner sc = new Scanner(System.in);
    System.out.print("Size of grid? ");
    int size = sc.nextInt();
    if (size > 0) {
      int[][] grid = new int[size][size];  
      int max = (int)Math.pow(size, 2);
      int length = Integer.toString(max).length();      
      int col = size / 2;
      int row = 0;
      grid[row][col]=1;
      displayGrid(grid, length, row, col);
      for (int i=2; i<=max; i++) {
        int newCol = (col+1) == size ? 0 : (col+1); // to the right, wrapping
        int newRow = (row-1) >= 0 ? (row-1) : size-1; // up, wrapping
        // if the new position is already taken or is the top right corner
        if (grid[newRow][newCol]!=0 || (newRow==0 && newCol==(size-1))) {
          // then move straight down, wrapping, instead
          newRow = (row+1) < size ? (row+1) : 0;
          newCol = col;
        }
        // put the current number in its spot and update row, col
        grid[newRow][newCol]=i;  
        row = newRow;
        col = newCol;
        displayGrid(grid, length, row, col);
      }
    }    
  }

  public static void displayGrid(int[][] grid, int padLength, int curRow, int curCol) {
    String format = "";
    for(int i=0; i<padLength; i++) {
      format = format + "0";
    }
    DecimalFormat df = new DecimalFormat(format);
    for(int r=0; r<grid.length; r++) {
      for(int c=0; c<grid[r].length; c++) {
        System.out.print(df.format(grid[r][c]));
        System.out.print(r==curRow && c==curCol ? "*" : " ");
      }
      System.out.println();
    }
    System.out.println();
  }
  
}

结果输出:星号 * 位于刚刚放置的数字的右侧!

Size of grid? 7
00 00 00 01*00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 00 00 00 

00 00 00 01 00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 02*00 00 

00 00 00 01 00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 00 03*00 
00 00 00 00 02 00 00 

00 00 00 01 00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 00 00 04*
00 00 00 00 00 03 00 
00 00 00 00 02 00 00 

00 00 00 01 00 00 00 
00 00 00 00 00 00 00 
00 00 00 00 00 00 00 
05*00 00 00 00 00 00 
00 00 00 00 00 00 04 
00 00 00 00 00 03 00 
00 00 00 00 02 00 00 

00 00 00 01 00 00 00 
00 00 00 00 00 00 00 
00 06*00 00 00 00 00 
05 00 00 00 00 00 00 
00 00 00 00 00 00 04 
00 00 00 00 00 03 00 
00 00 00 00 02 00 00 

00 00 00 01 00 00 00 
00 00 07*00 00 00 00 
00 06 00 00 00 00 00 
05 00 00 00 00 00 00 
00 00 00 00 00 00 04 
00 00 00 00 00 03 00 
00 00 00 00 02 00 00 

00 00 00 01 00 00 00 
00 00 07 00 00 00 00 
00 06 08*00 00 00 00 
05 00 00 00 00 00 00 
00 00 00 00 00 00 04 
00 00 00 00 00 03 00 
00 00 00 00 02 00 00 

00 00 00 01 00 00 00 
00 00 07 09*00 00 00 
00 06 08 00 00 00 00 
05 00 00 00 00 00 00 
00 00 00 00 00 00 04 
00 00 00 00 00 03 00 
00 00 00 00 02 00 00 

00 00 00 01 10*00 00 
00 00 07 09 00 00 00 
00 06 08 00 00 00 00 
05 00 00 00 00 00 00 
00 00 00 00 00 00 04 
00 00 00 00 00 03 00 
00 00 00 00 02 00 00 

00 00 00 01 10 00 00 
00 00 07 09 00 00 00 
00 06 08 00 00 00 00 
05 00 00 00 00 00 00 
00 00 00 00 00 00 04 
00 00 00 00 00 03 00 
00 00 00 00 02 11*00 

00 00 00 01 10 00 00 
00 00 07 09 00 00 00 
00 06 08 00 00 00 00 
05 00 00 00 00 00 00 
00 00 00 00 00 00 04 
00 00 00 00 00 03 12*
00 00 00 00 02 11 00 

00 00 00 01 10 00 00 
00 00 07 09 00 00 00 
00 06 08 00 00 00 00 
05 00 00 00 00 00 00 
13*00 00 00 00 00 04 
00 00 00 00 00 03 12 
00 00 00 00 02 11 00 

00 00 00 01 10 00 00 
00 00 07 09 00 00 00 
00 06 08 00 00 00 00 
05 14*00 00 00 00 00 
13 00 00 00 00 00 04 
00 00 00 00 00 03 12 
00 00 00 00 02 11 00 

00 00 00 01 10 00 00 
00 00 07 09 00 00 00 
00 06 08 00 00 00 00 
05 14 00 00 00 00 00 
13 15*00 00 00 00 04 
00 00 00 00 00 03 12 
00 00 00 00 02 11 00 

00 00 00 01 10 00 00 
00 00 07 09 00 00 00 
00 06 08 00 00 00 00 
05 14 16*00 00 00 00 
13 15 00 00 00 00 04 
00 00 00 00 00 03 12 
00 00 00 00 02 11 00 

00 00 00 01 10 00 00 
00 00 07 09 00 00 00 
00 06 08 17*00 00 00 
05 14 16 00 00 00 00 
13 15 00 00 00 00 04 
00 00 00 00 00 03 12 
00 00 00 00 02 11 00 

00 00 00 01 10 00 00 
00 00 07 09 18*00 00 
00 06 08 17 00 00 00 
05 14 16 00 00 00 00 
13 15 00 00 00 00 04 
00 00 00 00 00 03 12 
00 00 00 00 02 11 00 

00 00 00 01 10 19*00 
00 00 07 09 18 00 00 
00 06 08 17 00 00 00 
05 14 16 00 00 00 00 
13 15 00 00 00 00 04 
00 00 00 00 00 03 12 
00 00 00 00 02 11 00 

00 00 00 01 10 19 00 
00 00 07 09 18 00 00 
00 06 08 17 00 00 00 
05 14 16 00 00 00 00 
13 15 00 00 00 00 04 
00 00 00 00 00 03 12 
00 00 00 00 02 11 20*

00 00 00 01 10 19 00 
00 00 07 09 18 00 00 
00 06 08 17 00 00 00 
05 14 16 00 00 00 00 
13 15 00 00 00 00 04 
21*00 00 00 00 03 12 
00 00 00 00 02 11 20 

00 00 00 01 10 19 00 
00 00 07 09 18 00 00 
00 06 08 17 00 00 00 
05 14 16 00 00 00 00 
13 15 00 00 00 00 04 
21 00 00 00 00 03 12 
22*00 00 00 02 11 20 

00 00 00 01 10 19 00 
00 00 07 09 18 00 00 
00 06 08 17 00 00 00 
05 14 16 00 00 00 00 
13 15 00 00 00 00 04 
21 23*00 00 00 03 12 
22 00 00 00 02 11 20 

00 00 00 01 10 19 00 
00 00 07 09 18 00 00 
00 06 08 17 00 00 00 
05 14 16 00 00 00 00 
13 15 24*00 00 00 04 
21 23 00 00 00 03 12 
22 00 00 00 02 11 20 

00 00 00 01 10 19 00 
00 00 07 09 18 00 00 
00 06 08 17 00 00 00 
05 14 16 25*00 00 00 
13 15 24 00 00 00 04 
21 23 00 00 00 03 12 
22 00 00 00 02 11 20 

00 00 00 01 10 19 00 
00 00 07 09 18 00 00 
00 06 08 17 26*00 00 
05 14 16 25 00 00 00 
13 15 24 00 00 00 04 
21 23 00 00 00 03 12 
22 00 00 00 02 11 20 

00 00 00 01 10 19 00 
00 00 07 09 18 27*00 
00 06 08 17 26 00 00 
05 14 16 25 00 00 00 
13 15 24 00 00 00 04 
21 23 00 00 00 03 12 
22 00 00 00 02 11 20 

00 00 00 01 10 19 00 
00 00 07 09 18 27 00 
00 06 08 17 26 28*00 
05 14 16 25 00 00 00 
13 15 24 00 00 00 04 
21 23 00 00 00 03 12 
22 00 00 00 02 11 20 

00 00 00 01 10 19 00 
00 00 07 09 18 27 29*
00 06 08 17 26 28 00 
05 14 16 25 00 00 00 
13 15 24 00 00 00 04 
21 23 00 00 00 03 12 
22 00 00 00 02 11 20 

30*00 00 01 10 19 00 
00 00 07 09 18 27 29 
00 06 08 17 26 28 00 
05 14 16 25 00 00 00 
13 15 24 00 00 00 04 
21 23 00 00 00 03 12 
22 00 00 00 02 11 20 

30 00 00 01 10 19 00 
00 00 07 09 18 27 29 
00 06 08 17 26 28 00 
05 14 16 25 00 00 00 
13 15 24 00 00 00 04 
21 23 00 00 00 03 12 
22 31*00 00 02 11 20 

30 00 00 01 10 19 00 
00 00 07 09 18 27 29 
00 06 08 17 26 28 00 
05 14 16 25 00 00 00 
13 15 24 00 00 00 04 
21 23 32*00 00 03 12 
22 31 00 00 02 11 20 

30 00 00 01 10 19 00 
00 00 07 09 18 27 29 
00 06 08 17 26 28 00 
05 14 16 25 00 00 00 
13 15 24 33*00 00 04 
21 23 32 00 00 03 12 
22 31 00 00 02 11 20 

30 00 00 01 10 19 00 
00 00 07 09 18 27 29 
00 06 08 17 26 28 00 
05 14 16 25 34*00 00 
13 15 24 33 00 00 04 
21 23 32 00 00 03 12 
22 31 00 00 02 11 20 

30 00 00 01 10 19 00 
00 00 07 09 18 27 29 
00 06 08 17 26 28 00 
05 14 16 25 34 00 00 
13 15 24 33 35*00 04 
21 23 32 00 00 03 12 
22 31 00 00 02 11 20 

30 00 00 01 10 19 00 
00 00 07 09 18 27 29 
00 06 08 17 26 28 00 
05 14 16 25 34 36*00 
13 15 24 33 35 00 04 
21 23 32 00 00 03 12 
22 31 00 00 02 11 20 

30 00 00 01 10 19 00 
00 00 07 09 18 27 29 
00 06 08 17 26 28 37*
05 14 16 25 34 36 00 
13 15 24 33 35 00 04 
21 23 32 00 00 03 12 
22 31 00 00 02 11 20 

30 00 00 01 10 19 00 
38*00 07 09 18 27 29 
00 06 08 17 26 28 37 
05 14 16 25 34 36 00 
13 15 24 33 35 00 04 
21 23 32 00 00 03 12 
22 31 00 00 02 11 20 

30 39*00 01 10 19 00 
38 00 07 09 18 27 29 
00 06 08 17 26 28 37 
05 14 16 25 34 36 00 
13 15 24 33 35 00 04 
21 23 32 00 00 03 12 
22 31 00 00 02 11 20 

30 39 00 01 10 19 00 
38 00 07 09 18 27 29 
00 06 08 17 26 28 37 
05 14 16 25 34 36 00 
13 15 24 33 35 00 04 
21 23 32 00 00 03 12 
22 31 40*00 02 11 20 

30 39 00 01 10 19 00 
38 00 07 09 18 27 29 
00 06 08 17 26 28 37 
05 14 16 25 34 36 00 
13 15 24 33 35 00 04 
21 23 32 41*00 03 12 
22 31 40 00 02 11 20 

30 39 00 01 10 19 00 
38 00 07 09 18 27 29 
00 06 08 17 26 28 37 
05 14 16 25 34 36 00 
13 15 24 33 35 00 04 
21 23 32 41 00 03 12 
22 31 40 42*02 11 20 

30 39 00 01 10 19 00 
38 00 07 09 18 27 29 
00 06 08 17 26 28 37 
05 14 16 25 34 36 00 
13 15 24 33 35 00 04 
21 23 32 41 43*03 12 
22 31 40 42 02 11 20 

30 39 00 01 10 19 00 
38 00 07 09 18 27 29 
00 06 08 17 26 28 37 
05 14 16 25 34 36 00 
13 15 24 33 35 44*04 
21 23 32 41 43 03 12 
22 31 40 42 02 11 20 

30 39 00 01 10 19 00 
38 00 07 09 18 27 29 
00 06 08 17 26 28 37 
05 14 16 25 34 36 45*
13 15 24 33 35 44 04 
21 23 32 41 43 03 12 
22 31 40 42 02 11 20 

30 39 00 01 10 19 00 
38 00 07 09 18 27 29 
46*06 08 17 26 28 37 
05 14 16 25 34 36 45 
13 15 24 33 35 44 04 
21 23 32 41 43 03 12 
22 31 40 42 02 11 20 

30 39 00 01 10 19 00 
38 47*07 09 18 27 29 
46 06 08 17 26 28 37 
05 14 16 25 34 36 45 
13 15 24 33 35 44 04 
21 23 32 41 43 03 12 
22 31 40 42 02 11 20 

30 39 48*01 10 19 00 
38 47 07 09 18 27 29 
46 06 08 17 26 28 37 
05 14 16 25 34 36 45 
13 15 24 33 35 44 04 
21 23 32 41 43 03 12 
22 31 40 42 02 11 20 

30 39 48 01 10 19 00 
38 47 49*09 18 27 29 
46 06 08 17 26 28 37 
05 14 16 25 34 36 45 
13 15 24 33 35 44 04 
21 23 32 41 43 03 12 
22 31 40 42 02 11 20 

作者post的预期输出:

30 39 48 01 10 19 28
38 47 07 09 18 27 29
46 06 08 17 26 35 37
05 14 16 25 34 36 45
13 15 24 33 42 44 04
21 23 32 41 43 03 12
22 31 40 49 02 11 20