【问题标题】:Two Dimensional int array prints row of values rather than just one二维 int 数组打印一行值,而不仅仅是一个
【发布时间】:2017-05-19 21:24:24
【问题描述】:

所以我有一个给定大小的二维 int 数组。我想将值 1 分配给此数组中的特定位置。我正在使用另一个数组的输出值。像这样:

 public void printQueens(){
   int k = queens[0];
   board[1][queens[0]] = 1;
   System.out.print(queens[1]);}

k 值是为了确保它是一个整数值。皇后数组是给定大小的一维整数数组。例如。 {6,7,2,4}

queens = new int[NUM_QUEEN];

它是在反向跟踪方法中创建的:

public void backtrack(int row){

    for(int i = 0; i<BOARD_SIZE; i++){
        if(canPlace(row,i)){
            queens[row] = i;
            if(row == NUM_QUEEN-1){
                printQueens();               
            }
            else{
                backtrack(row+1);
            }

        }
    }
}

我期望的输出是第一行和皇后[0] 列中的一个(在本例中为 7)。输出是第一行中的一行:

  0 0 0 0 0 0 0 0
  1 1 1 1 1 1 1 1
  0 0 0 0 0 0 0 0
  0 0 0 0 0 0 0 0
  0 0 0 0 0 0 0 0
  0 0 0 0 0 0 0 0
  0 0 0 0 0 0 0 0
  0 0 0 0 0 0 0 0

如果我将 7 放入而不是 Queens[0] 输出是正确的:

  0 0 0 0 0 0 0 0
  0 0 0 0 0 0 1 0
  0 0 0 0 0 0 0 0
  0 0 0 0 0 0 0 0
  0 0 0 0 0 0 0 0
  0 0 0 0 0 0 0 0
  0 0 0 0 0 0 0 0
  0 0 0 0 0 0 0 0

所以我的问题是为什么会这样?如果常规显式整数有效,为什么隐式整数无效?

【问题讨论】:

  • board[1][k] = 1; 不可能更新整行。请发帖minimal reproducible example
  • 不太确定我还能如何验证。也许是截图?
  • 不,请不要。只需包含重现问题所需的最少代码。有关详细信息,请参阅上面的链接。
  • 我刚刚进行了编辑,试图进一步解释皇后的来源。希望这会有所帮助,我知道它看起来很模糊。感谢您的建议
  • "k 值是为了确保它是一个整数值。" “它”还有什么其他价值? “它”的先行词是什么?

标签: java arrays command-line int backtracking


【解决方案1】:

嗯...我试图理解你的问题。这是执行您想要的代码的建议(如果我理解问题)。

public static void main(String[] args) {

    int boardSize = 8;
    int queens[]  = {6, 7, 2, 4};

    int board[][] =   {{0, 0, 0, 0 , 0, 0, 0, 0},
                       {0, 0, 0, 0 , 0, 0, 0, 0},
                       {0, 0, 0, 0 , 0, 0, 0, 0},
                       {0, 0, 0, 0 , 0, 0, 0, 0},
                       {0, 0, 0, 0 , 0, 0, 0, 0},
                       {0, 0, 0, 0 , 0, 0, 0, 0},
                       {0, 0, 0, 0 , 0, 0, 0, 0},
                       {0, 0, 0, 0 , 0, 0, 0, 0}};

    int k = queens[0];
    board[1][k] = 1;

    for (int row = 0; row < boardSize; row++) {
        for (int col = 0; col < boardSize; col++) {
            System.out.print(board[row][col] + " ");
        }
        System.out.println();
    }
}

输出是

0 0 0 0 0 0 0 0 
0 0 0 0 0 0 1 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 

【讨论】:

  • 感谢您的回答!我已经从字面上尝试了您的确切代码并得到了一排代码。显然我缺少一些东西!我想有人可能知道关于这个特定代码的某个“故障”。不过谢谢!
  • 你的环境是什么(操作系统、IDE、JDK)?
【解决方案2】:

女王的阵列从未被重置。因此,当我使用皇后数组时,由于递归,它只是将每个值叠加在一起。

【讨论】:

    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 2020-08-28
    • 2022-10-06
    • 2022-10-14
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多