好的,这是我的问题here的附录,已经得到了解答。
我不想对上一个问题的答案感到惊讶,我认为这应该对JB Nizet公平地回答我的第一个问题有自己的问题,并且因此而获得了赞誉。
我正在为一个类实现一个二维数据结构。使用的方法是一个“NxN”对象数组。
所以,
Cell[][] dataStructure = new Cell[N][N];
每个单元依赖于其左侧单元格的输出,并依赖于其上方的单元格,以创建自己的输出。将测试2-d结构的输入范围,000到111。
2-D结构示例以及输出如何流入下一个单元
示例:
假设标准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方法,对于二维结构中的单元格,在指定的输入上执行逻辑。结果是两个输出的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函数始终返回从左边输入的值的逻辑NOT。*“输出”I我试图检查我的方法是用红色圈出来的。
答案 0 :(得分:1)
return currentStructure[xPos][yPos].getResult(leftOutput[1], topOutput[0]);
看到区别?我交换了xPos和yPos。我在调试时理解了一个短暂的闪光时刻,但它的解释再次在我的大脑中消失了。它与访问结构有关,首先需要yPosition,然后是xPosition ......这与我们都知道和喜爱的标准(x.y)符号相反。