Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我能';我不明白为什么这个递归是';行不通_Java_Oop_Recursion_Input - Fatal编程技术网

Java 我能';我不明白为什么这个递归是';行不通

Java 我能';我不明白为什么这个递归是';行不通,java,oop,recursion,input,Java,Oop,Recursion,Input,我正在学习递归,但还没有完全掌握它。所以在这里我试图做一个关于递归的赋值,但是我被卡住了 在这个作业中,我应该要求用户输入短语,程序会确定它是否是回文。我们应该使用递归来完成这个任务 这是递归的部分,我不太明白如何处理它,因为当我运行它时,我没有得到任何错误,但它总是被认为是错误的 我正在使用ArrayList保存所有用户输入 这是我现在掌握的密码 //instance variables private boolean det; private String input; private St

我正在学习递归,但还没有完全掌握它。所以在这里我试图做一个关于递归的赋值,但是我被卡住了

在这个作业中,我应该要求用户输入短语,程序会确定它是否是回文。我们应该使用递归来完成这个任务

这是递归的部分,我不太明白如何处理它,因为当我运行它时,我没有得到任何错误,但它总是被认为是错误的

我正在使用
ArrayList
保存所有用户输入

这是我现在掌握的密码

//instance variables
private boolean det;
private String input;
private String inputHelp;

//constructor
public RecursivePalindrome(String i)
{
    det = false;
    input = i;
    inputHelp = "";
}

//determines if the method is a palindrome or not using recursions
public boolean palindrome(String b)
{

    if(inputHelp.length() == 0)
    {
        det = true;
    }
    if(inputHelp.substring( 0 , 1 ).equals(inputHelp.substring( inputHelp.length() )))
    {
        inputHelp = inputHelp.substring( 1, inputHelp.length());
        palindrome(inputHelp);
    }
    else 
    {
        det = false;
    }
    return det;
}

据我所知,您从未将
inputHelp
设置为空字符串以外的任何内容,并且传入方法的字符串
b
在任何地方都不会使用


因此,该方法永远不会调用自身,即使它调用了,传入的值也不会用于任何东西,从而使递归无效。

有三个错误。首先,请注意:第二个参数是结束索引“exlusive”。其次,需要使用递归调用的结果。最后(正如评论中正确指出的那样),您应该考虑具有奇数字母计数的回文(第一个条件):


if(inputHelp.length())此解决方案(第二个)完全错误。但它可能是StackOverflow的合适解决方案,因为这正是您的代码要做的。好的,修复了一个问题。如果原始字符串是奇数长度的回文,仍然会失败。@ajb感谢您的评论(即使这段代码并没有像您所说的那样“完全”产生堆栈溢出:)。奇数长度的调用很好-也解决了这个问题。谢谢大家,真的很感谢你们的帮助!:DRecursive方法通常不应该使用全局变量或实例变量来完成它们的工作,至少在您更好地理解递归之前是这样的。当一个方法调用自身,并且第二个调用修改了一个全局变量或实例变量时,它会影响第一个调用的工作方式简单的递归方法(就像你在课堂上看到的那种)应该只使用它们的参数和局部变量。
if (inputHelp.length() <= 1)
{
    det = true;
}
else if (inputHelp.substring(0, 1)
             .equals(inputHelp.substring(inputHelp.length() - 1)))
{
    inputHelp = inputHelp.substring( 1, inputHelp.length() - 1);
    det = palindrome(inputHelp);
}
else 
{
    det = false;
}
public boolean palindrome(String b)
{
    if (b.length() <= 1)
    {
        return true;
    }

    if (b.substring(0, 1)
           .equals(b.substring(b.length() - 1)))
    {
        return palindrome(b.substring(1, b.length() - 1));
    }

    return false;
}