所以我有一个给定大小的二维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];
它是以bactracking方法创建的:
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);
}
}
}
}
我期望的输出是第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,而不是皇后[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
所以我的问题是为什么会发生这种情况?如果常规显式整数有效,为什么隐式整数不是?
答案 0 :(得分: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
答案 1 :(得分:0)
女王的阵列从未被重置过。因此,当我使用皇后数组时,由于递归,它只是将每个值叠加在一起。