さて、これはここでの私の質問への補遺であり、答えられました。
前の質問の答えを安くしたくなかったので、私はこれが私の最初の質問に答えたJB Nizetに公平にそれ自身の質問を持つべきであると決め、そのようなことで信用を得ました。
クラスの2次元データ構造を実装しています。使用されるアプローチは、オブジェクトの「NxN」配列です。
それで、
Cell[][] dataStructure = new Cell[N][N];
各セルは、その左側のセルとその上のセルの出力に依存して、独自の出力を作成します。2次元構造は、入力範囲000〜111でテストされます。
2次元構造の例と出力が次のセルにどのように流れるか
例:
標準の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]);
}
簡単にするために、2次元構造のセルに対して指定された入力に対してロジックを実行する単一のgetResultメソッドがあります。結果は、各方向に1つずつ、2つの出力の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を返すのはなぜですか?私がデバッグしていることから、問題は私のロジックアプリケーションにはなく、ここには含まれていません。
再度、感謝します。
======= UPDATE========BevynQの要求によるサンプル3x3。
左端と上端に沿った入力は、各テスト中に変化します。この例は、基本ケース000の場合です。** NOT関数は、常に左から入力する値の論理否定を返します。*私が試みている「出力」私のメソッドをチェックインするには、赤で囲まれています。