2011-05-29 65 views
0

我在哪裏出錯了?這似乎並不奏效。我試圖在參數中指定一個i和j來定位單元格。並以9 x 9數獨網格返回可能的值。 這是什麼呢,第一個數組,即[0] =如果單元格爲空則爲true,如果它正在播放或佔用,則爲false。 數組的其餘部分由可以插入該i和j單元格的值組成。因此可能的值是4,那麼它將返回[4] = true,其餘的布爾數組將是可能的。任何人都可以打電話給我,我哪裏錯了? while循環不正確?alogrithim可能的值java sudoku

public boolean[] getPossible(int i, int j) 
    { 

    final int booArraySize = 10; 
    boolean[] possibleArray = new boolean[booArraySize]; 
    int zero = 0; 
    if (game[i][j] == 0) 
    { 

     for(int b=1; b < possibleArray.length; b++) 
     { 
      possibleArray[b] = true; 
     } 

     int row=i; 
     int col= 0; 

     int[] copyy = new int[GRID_SIZE]; 
     for(int m = 0; m < copyy.length; m++) 
     { 
      copyy[m] = 1; 
     } 

     while ((copyy[0] < 10) && (copyy[0] >0)) 
     { 
      for (int q= col+1; q < game.length; q++) 
      { 
       if(copyy[0] == game[row][q]) 
       { 
        possibleArray[q] = false; 
       } 
       else 
       { 
        possibleArray[q] = possibleArray[q]; 
       } 
      } 
      copyy[0] = copyy[0] + 1; 

     } 
     possibleArray[0]= true; 
    } 

    return possibleArray; 
} 
+0

遊戲數據結構代表什麼? – 2011-05-29 02:33:31

+0

你是什麼意思? – alex 2011-05-29 02:36:23

+0

頌歌中的第一個奇怪之處是,您總是使用'copyy [0]'而不是該數組中的任何其他元素。 第二件事是,只要同一列中的單元格基本上不包含'copyy [0]',那麼'possibleArray [q]'被設置爲true,除非該列中的每個**單元格都是4,4將是可能的。 – trutheality 2011-05-29 02:37:35

回答

1

據我瞭解,你要設定possibleArraytrue對應於允許值的位置。您似乎在掃描遊戲板並進行一些測試,以決定何時將每個索引位置設置爲true。我建議你改變你的邏輯:設置possibleArraytrue爲所有值,然後掃描板,以排除特定值的值。你可以做到這一點作爲索引使用在與(i,j)的有關每個位置上的遊戲板的值設置possibleArrayfalse,在這個僞代碼:

// initialize possibleArray to true at all positions 
for (each board position u,v along row i, column j, and square containing (i,j)) { 
    possibleArray[game[u][v]] = false; 
} 
possibleArray[0] = true; // do this after instead of before 

對於多空博弈的位置,這將將possibleArray [0]設置爲false,但在循環結束後解決該問題。

編輯:

這裏是我試圖解決同時行和列。它不涉及包含位置(i,j)的3x3框;這只是一個練習。 :)

public boolean[] getPossible(int i, int j) 
    { 

    boolean[] possibleArray = new boolean[10]; 
    if (game[i][j] == 0) 
    { 
     for(int b=1; b < 10; b++) 
     { 
      possibleArray[b] = true; 
     } 

     for (int n = 1; n < GRID_SIZE; ++n) { 
      possibleArray[game[i][n]] = possibleArray[game[n][j]] = false; 
     } 
     // TODO Scan the 3x3 square containing cell (i,j) 
     possibleArray[0]= true; 
    } 
    return possibleArray; 
} 

我假定(基於代碼),該遊戲[1] [1]至遊戲[GRID_SIZE] [GRID_SIZE]是用於遊戲板正確的索引範圍。

+0

現在它給了我真實和錯誤,但如果好像說8已經存在於那一行內,那麼它似乎是正確的,那麼它對於[8] =真,而不是假而返回真。 queit strange – alex 2011-05-29 03:02:45

+0

發佈您的修改代碼? – 2011-05-29 03:12:21

+0

yepp我編輯它 – alex 2011-05-29 03:17:41