Java 二维递归总是返回0

Java 二维递归总是返回0,java,data-structures,recursion,Java,Data Structures,Recursion,好的,这是我问题的附录,已经回答了 不想贬低上一个问题的答案,我决定这应该有自己的问题,公平地说,JB Nizet回答了我的第一个问题,并因此获得了好评 我正在为一个类实现一个二维数据结构。使用的方法是对象的“NxN”数组 所以 每个单元格都依赖其左侧和上方单元格的输出来创建自己的输出。二维结构将在输入范围000到111之间进行测试 二维结构示例以及输出如何流入下一个单元格 示例: 假设标准X、Y方向,我尝试使用以下方法获取右下角单元格的输出: 为了简化,我现在有了一个getResult方法,

好的,这是我问题的附录,已经回答了

不想贬低上一个问题的答案,我决定这应该有自己的问题,公平地说,JB Nizet回答了我的第一个问题,并因此获得了好评

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

所以

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

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

示例:

假设标准X、Y方向,我尝试使用以下方法获取右下角单元格的输出:

为了简化,我现在有了一个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?从调试中我看到,问题不在我的逻辑应用程序中,我在这里没有包括这个问题

再次感谢

=======更新======== 应BevynQ的要求,样品为3x3

在每次测试期间,沿左边缘和上边缘的输入会发生变化,本例适用于基本情况000**NOT函数总是返回从左边输入的值的逻辑NOT。*我试图在我的方法中检查的“输出”用红色圈起来


尤里卡,它太简单了,我忽略了它,没有抓住它。问题主要与我对变量名的选择不当有关。我修补了可能错误的阵列输出,但解决方案是将返回线更改为:

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

看到区别了吗?我交换了XPO和YPO。在调试过程中,我明白了一个短暂的闪光时刻,但对它的解释又在我的脑海中消失了。它与访问结构有关,结构首先需要yPosition,然后是xPosition。。。这与我们都知道和喜欢的标准(x.y)符号相反。

你能给出一个填充网格作为例子吗?你想让我隐藏逻辑,还是简单地表示应用于每个输出的逻辑?@BevynQ我更新了原始帖子,加入了一个工作示例fpr a 3x3矩阵。什么是
xDirStr
?您的代码似乎在
getResult
中重复。两个函数的输出都应该是数组。{0}是返回的还是一个空数组?有
xDirStr
yDirStr
,它们是我定义的逻辑控件,逻辑部分似乎工作正常。
    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;
}
     return currentStructure[xPos][yPos].getResult(leftOutput[1], topOutput[0]);