当前位置: 首页 > 知识库问答 >
问题:

回文字符串的返回不是预期的。背后的机制是什么

微生令
2023-03-14

我更感兴趣的是为什么返回函数不起作用。不是关于优化或我的思考方法

我尝试了一个简单的程序来递归检查字符串是否是回文的。

package palindrom;

public class PalindromString {

  public static boolean isPalindrom(String myText) {

    char f = myText.charAt(0);
    char l = myText.charAt(myText.length() - 1);

    if (f != l) {
        return false;
    }

    else {

        if (myText.length() > 1) {
            isPalindrom(myText.substring(1, myText.length() - 1));

        } else {
            return true;
        }

    }
    return true;

  }

  public static void main(String[] args) {
    String text = "cococbc";
    System.out.println(isPalindrom(text));
  }
}

对于第一步,程序获取第一个“c”字符和最后一个字符,并将它们进行比较,然后再次调用函数,这次使用“ococb”字符串。该函数取“o”字符和“b”,它比较它们,发现它们不相等,它转到“返回false”声明,但它返回真?

你能帮我吗?我很想明白它为什么会这样:|。

共有1个答案

郭德惠
2023-03-14

它看到它们不相等,它进入“返回false;”语句,但它返回true?

是的,isPalindrom("oCocb")返回false,但是当递归调用返回时,您忽略了它的返回值,因此isPalindrom("coCocbc")返回true。您需要返回isPalindrom(myText.substring(1,myText.length()-1))才能修复此问题。

除了这个问题,您还应该将条件更改为要求myText.length()至少为3,否则您可能会将空String'传递给递归调用,因为您正在删除第一个和最后一个字符。

    if (myText.length() >= 3) {
        return isPalindrom(myText.substring(1, myText.length() - 1));
    } else {
        return true;
    }

完成更改后,您应该移除最后的< code >返回值true,将无法再访问它。

您还可以考虑在开头添加对< code>null或空< code >字符串的检查,以便在调用< code>null或空< code >字符串时不会引发异常。

 类似资料:
  • 我使用的是Laravel,并有一个查询,它使用列的进行选择: 我已经安装了mysqldn,AFAIK Laravel使用。 但是是一个字符串,不管列是什么类型。(它是一个整数列) 另外,如果我这样做: < code>foo_bar以整数形式返回。

  • 这可能是最简单的事情之一,但我没有看到我做错了什么。 我的输入包括第一行带有数字(要读取的行数),一堆带有数据的行和最后一行只带有\n。我应该处理这个输入,在最后一行之后,做一些工作。 我有这样的意见: 为了读取输入,我有以下代码。 我的问题是为什么我不打印任何东西?程序读取第一行,然后什么也不做。

  • 以下endpoint以字符串形式返回用户名。 我如何构造它以返回一个json对象,该对象包含一个键,该键的值为该字符串(例如,{“user”:“joeuser”})?

  • 问题内容: 看到这个游乐场:http : //play.golang.org/p/dWku6SPqj5 基本上,我正在使用的库将a作为参数接收,然后需要从字节数组中获取。在幕后,该参数是一个与字节数组的json结构匹配的结构,但该库没有对该结构的引用(但它确实具有对相应的reflect.Type through的引用)。 为什么json包无法检测基础类型?由于某种原因,它会返回一个简单的映射,而不

  • 问题内容: 我正在尝试读取(位于Javascript源的同一文件夹中)的内容,并使用以下代码显示它: 的内容创建于: 测试Node.js readFile() 我得到这个: 问题答案: 从文档: 如果未指定编码,则返回原始缓冲区。 这可能解释了。指定一个有效的编码,例如作为文件名之后的第二个参数。如,

  • 我试图运行Spring启动应用程序,这将返回我静态文件夹上的超文本标记语言静态文件,问题是:每次我加载页面:127.0.0.1我得到字符串"bakara",而不是超文本标记语言文件bakara.html.,当我加载127.0.0.1/bakara.html我得到bakara.html文件 pom.xml: 应用属性: HomeController.java: 项目结构: