gpt4 book ai didi

java - 二维递归总是返回 0

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:10:59 25 4
gpt4 key购买 nike

好的,所以这是我的问题的附录 here , 得到了回答。

不想贬低前一个问题的答案,为了公平起见,JB Nizet 决定这个问题应该有自己的问题,他回答了我的第一个问题,并因此获得了荣誉。

我正在为一个类实现一个二维数据结构。使用的方法是“NxN”对象数组。

所以,

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

每个单元格都依赖于其左侧和上方单元格的输出来创建自己的输出。二维结构将针对输入范围 000 到 111 进行测试。

二维结构示例以及输出如何流入下一个单元格

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 方法,用于二维结构中的单元格,对指定的输入执行逻辑。结果是两个输出的 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。**NOT 函数始终返回从左侧输入的值的逻辑非。*“输出”I “正在尝试检查我的方法”以红色圈出。

3x3 Example for 000

最佳答案

Eureka ,太简单了,我忽略了它,没有捕获它。问题主要与我对变量名的选择不当有关。我修改了可能有错误的数组输出,但解决方案是将返回行更改为:

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

看出区别了吗?我交换了 xPos 和 yPos。调试的时候明白了一个闪闪发光的瞬间,但是对它的解释又在我的脑海里消失了。它与访问结构有关,它首先需要 yPosition,然后是 xPosition...这与我们都知道和喜爱的标准 (x.y) 符号相反。

关于java - 二维递归总是返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13695318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com