2012-12-04 93 views
3

好吧,所以這是我的問題here的附錄,已回答。2-D遞歸總是返回0

我不想辜負上一個問題的答案,我認爲這應該有公平的自己的問題,JB Nizet回答我的第一個問題,並獲得這樣的信譽。

我正在實現一個類的二維數據結構。使用的方法是一個「NxN」對象數組。

所以,

Cell[][] dataStructure = new Cell[N][N]; 

每個單元依賴於電池的輸出到它的左側,和它上面的細胞,創建自己的輸出。 2-d的結構將用於一系列輸入進行測試,000到111

2- d結構的實施例,輸出如何流入下細胞

enter image description here

示例:

假設標準的X,Y方向,我嘗試使用以下的方法來獲得右下方電池的輸出:

/** 
* Recursive method that returns the output of a given cell 
* @param row: the row the cell is in (its yPos) 
* @param inputs: 
* @param column: the column the cell is in (its xPos) 
*/ 
private int[] getOutput(int[] inputs,int yPos, int xPos){ 
     if (yPos==-1){ 
       int[] out = new int[2]; 
       out[0] = 0; // yPos 
       out[1] = inputs[xPos]; //xPos 
       return out; 
      } 
     else if (xPos==-1){ 
       int[] out = new int[2]; 
       out[0] = inputs[yPos]; //yPos 
       out[1] = 0; //xPos 
       return out; 
     } 

     int[] leftOutput = getOutput(inputs, yPos, xPos-1); 
     int[] topOutput = getOutput(inputs, yPos-1, xPos); 

     return currentStructure[yPos][xPos].getResult(leftOutput[1], topOutput[0]); 
} 

爲了簡化事情,我現在有一個getResult方法,對於2-d結構中的單元格,在指定的輸入上執行邏輯。結果是兩個輸出的int [],每個方向一個。

該方法的getResult,因爲它目前爲被寫成這樣:

public int[] getResult(int left, int top) 
{ 
    int[] resultOut = new int[2]; 
    if (xDirStr.equals("00")){ // AND 
     resultOut[0]= left * top; 
    } 
    if (xDirStr.equals("01")){ // OR 
     if (left ==1 || top ==1) 
       resultOut[0]= 1; 
     else 
     resultOut[0] =0;; 
    } 
    if (xDirStr.equals("10")){ // NOT, USES ONLY NOT X 
     if (left ==0) 
     resultOut[0]= 1; 
     else 
     resultOut[0]= 0; 
    } 
    if (xDirStr.equals("11")){ // XOR 
     if ((left==1 && top==0) || (left==0 && top==1)) 
      resultOut[0]= 1; 
     else 
     resultOut[0]= 0; 
    } 

    if (yDirStr.equals("00")){ // AND 
     resultOut[1]= left * top; 
    } 
    if (yDirStr.equals("01")){ // OR 
     if (left ==1 || top ==1) 
       resultOut[1]= 1; 
     else 
     resultOut[1]= 0; 
    } 
    if (yDirStr.equals("10")) { // NOT, USES ONLY NOT X 
     if (left ==0) 
     resultOut[1]= 1; 
     else 
     resultOut[1]= 0; 
    } 
    if (yDirStr.equals("11")) { // XOR 
     if ((left==1 && top==0) || (left==0 && top==1)) 
      resultOut[1]= 1; 
     else 
     resultOut[1]= 0; 
    } 
     return resultOut; 
} 

我已經調試一步一步的,但不能趕上我的問題。輸出不匹配我手動重新驗證它,輸出始終是0.任何有用的提示將不勝感激!

我的具體問題是爲什麼getOutput總是返回0?從我看到的調試中,這個問題不在我的邏輯應用程序中,我沒有在這裏列出。

再次感謝。

=======更新======== 樣品3x3,應BevynQ的要求。

沿着左邊和上邊沿的輸入在每次測試期間都會改變,這個例子是針對基本情況000. **非函數總是返回從左邊進入的值的邏輯非* *「輸出」我試圖檢查我的方法是用紅色圈出來的。

3x3 Example for 000

+0

你能否給一個填充網格作爲例子? – BevynQ

+0

你想讓我隱藏一下邏輯,還是簡單地表示應用於每個輸出的邏輯? – Ramrod

+0

@BevynQ我更新了原來的帖子,以包括一個3x3矩陣的工作示例。 – Ramrod

回答

1

尤里卡,它是如此簡單,我忽略了它,並沒有抓住它。問題主要與我對變量名的選擇不好有關。我修補了可能有錯陣列輸出,但解決方案是改變返回線:

 return currentStructure[xPos][yPos].getResult(leftOutput[1], topOutput[0]); 

看到區別?我交換了xPos和yPos。我在調試的時候瞭解了一個簡短的閃光時刻,但它的解釋又一次在我的大腦中消失了。它與訪問結構有關,該結構首先需要yPosition,然後是xPosition ...,這與我們都知道並喜愛的標準(x.y)符號相反。