二维 int 数组打印一行值,而不仅仅是一个

Posted

技术标签:

【中文标题】二维 int 数组打印一行值,而不仅仅是一个【英文标题】:Two Dimensional int array prints row of values rather than just one 【发布时间】: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 值是为了确保它是一个整数值。" “它”还有什么其他价值? “它”的先行词是什么? 【参考方案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】:

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

【讨论】:

以上是关于二维 int 数组打印一行值,而不仅仅是一个的主要内容,如果未能解决你的问题,请参考以下文章

指针与数组——二级指针 数组初始化 数组打印 动态二维数组

C语言 如何将一个二维数组的值全部替换成另一个二维数组

C 语言数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )

第六章 数组

C语言二维数组问题

数组-数组的常见算法