gpt4 book ai didi

java - 返回一个回文字符串,它不是预期的字符串。背后的机制是什么

转载 作者:行者123 更新时间:2023-11-30 02:04:18 24 4
gpt4 key购买 nike

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

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

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”,比较它们,发现它们不相等,然后转到“return false;”语句,但它返回 true ?

你能帮我解决这个问题吗?我真的很想了解为什么它会这样:|。

最佳答案

it sees that they are not equal , it goes to the "return false;" statement , and yet it returns true ?

是的,isPalindrom("ococb")返回false ,但是当该递归调用返回时,您忽略它的返回值,因此 isPalindrom("cococbc")返回true 。您需要返回isPalindrom(myText.substring(1, myText.length() - 1))为了解决这个问题。

除了这个问题,您还应该更改条件以要求 myText.length() is at least 3, otherwise you may pass an empty String` 到递归调用,因为您要删除第一个和最后一个字符。

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

进行更改后,您应该删除最后的 return true; ,将不再可达。

您还可以考虑添加 null 的检查或空String在开始时,为了使您的方法在调用 null 时不引发异常或空String .

关于java - 返回一个回文字符串,它不是预期的字符串。背后的机制是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51808716/

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