2017-05-19 4 views
-2

그래서 주어진 크기의 2 차원 int 배열을가집니다. 이 배열의 특정 위치에 1의 값을 지정하려고합니다. 다른 배열의 출력 값을 사용하고 있습니다. 다음과 같이 입력하십시오 :2 차원 int 배열은 하나의 값이 아닌 값의 행을 인쇄합니다.

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

k 값은 정수 값인지 확인하기위한 것입니다. 여왕의 배열은 주어진 크기의 1 차원 정수 배열입니다. 예. {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); 
      } 

     } 
    } 
} 

I 기대하고 출력은 1 행 및 퀸 [0] 열에 하나 (이 경우, 7). 내가 대신 왕비의에서, 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 

[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 

그래서 내 질문은 왜 출력이 1 행에서 사람의 행입니다 이 일이 일어난거야? 정규 명시 적 정수가 작동하는 경우 암시 적 정수가 아닌 이유는 무엇입니까?

+2

보드 [1] [k] = 1;은 전체 행을 업데이트 할 수 없습니다. [mcve]를 게시하십시오. – shmosel

+0

내가 확인할 수있는 방법을 정확히 알지 못했습니다. 어쩌면 스크린 샷일까요? – conk

+0

아니요, 아니요. 문제를 재현하는 데 필요한 최소한의 코드 만 포함하면됩니다. 자세한 내용은 위의 링크를 참조하십시오. – shmosel

답변

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 
+0

답변 해 주셔서 감사합니다! 나는 당신의 정확한 코드를 문자 그대로 시도해 보았습니다. 분명히 뭔가 빠진 것이 있습니다! 나는 누군가가이 특정 코드에 관한 어떤 "결함"을 알고있을 것이라고 생각했다. 그래도 고마워! – conk

+0

환경 (OS, IDE, JDK)은 무엇입니까? – tnas

+0

JDK. Windows의 명령 프롬프트에서 실행하고 있습니다. – conk

0

이다. 그래서 여왕 배열을 사용했을 때 재귀 때문에 각각의 값을 서로 겹치게되었습니다.