2017-05-19 1 views
-2

Also habe ich ein zweidimensionales int-Array einer gegebenen Größe. Ich möchte einer bestimmten Stelle in diesem Array den Wert 1 zuweisen. Ich verwende den Ausgabewert von einem anderen Array. so etwas wie diese:Zweidimensionales int-Array druckt eine Reihe von Werten und nicht nur eine

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

Die k-Wert ist es sicherzustellen, dass es ist ein Integer-Wert. Das Array der Königin ist ein eindimensionales Ganzzahl-Array mit gegebener Größe. z.B. {6,7,2,4}

queens = new int[NUM_QUEEN]; 

Es ist in einem bactracking Methode erstellt:

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); 
      } 

     } 
    } 
} 

Der Ausgang ich erwarte eine Eins in der ersten Reihe und Königinnen [0] Spalte (in diesem Fall 7). Die Ausgabe ist eine Reihe von Einsen in dieser ersten Reihe:

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 

Wenn ich sage platzieren, 7, statt Königinnen [0] Ausgabe korrekt ist:

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 

Also meine Frage ist, warum ist das passiert? Wenn eine reguläre explizite Ganzzahl funktioniert, warum wird eine implizite Ganzzahl nicht verwendet?

+2

'board [1] [k] = 1;' kann möglicherweise keine ganze Zeile aktualisieren. Bitte poste ein [mcve]. – shmosel

+0

Nicht genau sicher, wie ich sonst noch überprüfen könnte. Vielleicht ein Screenshot? – conk

+0

Nein, bitte nein. Geben Sie nur den minimalen Code ein, der zum Reproduzieren des Problems erforderlich ist. Siehe den obigen Link für weitere Informationen. – shmosel

Antwort

1

Nun ... Ich habe versucht, Ihr Problem zu verstehen. Dies ist ein Vorschlag von Code, der tut, was Sie wollen (wenn ich das Problem verstanden habe).

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(); 
    } 
} 

Der Ausgang ist

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

Danke für die Antwort! Ich habe deinen genauen Code buchstäblich ausprobiert und eine Reihe von Einsen bekommen. Da ist eindeutig etwas, das ich vermisse! Ich nahm an, dass jemand über einen bestimmten "Fehler" in Bezug auf diesen speziellen Code Bescheid wissen könnte. Trotzdem danke! – conk

+0

Was ist Ihre Umgebung (OS, IDE, JDK)? – tnas

+0

JDK. Ich führe es nur in der Eingabeaufforderung von Windows – conk

0

Die Anordnung der Königin nie zurückgesetzt zu werden wurde. Wenn ich also das Queen-Array verwendete, überlagerte es jeden Wert wegen der Rekursion einfach übereinander.

Verwandte Themen