gpt4 book ai didi

java - 递归在应该为真时返回假

转载 作者:行者123 更新时间:2023-11-29 06:38:49 25 4
gpt4 key购买 nike

我正在做一个单词匹配递归,但是我遇到了一个问题。我有一个 if 语句,如果语句为真,它会返回 true。我有一个 system.print 行来测试它是否确实正确运行并且确实如此。但是,当该方法应该返回 true 时,它​​返回 false。抱歉,如果我不清楚,我希望我的代码能解决问题。

public class A10 {

public static int counter = 3;

public static boolean match(String x, String y) {
// If the x string's letter at place 'counter' is the same as y string's letter at place counter.
if ((counter) >= x.length()) {
System.out.println("RUNNING THIS METHOD");
return true;
}

if (x.charAt(counter) == y.charAt(counter)) {
counter++;
match(x, y);
}

return false;

}

public static void main(String[] args) {
System.out.println(match("asdfasdf", "asdfasdf"));
}
}

当你运行它时,它会打印“RUNNING THIS METHOD”,但随后它会返回 false,而当它应该返回 true 时...有人能告诉我是什么原因造成的以及我将如何解决它吗?

最佳答案

match() 递归调用自身时,它会忽略返回值。

因此如下:

       match(x, y);

应该是

       return match(x, y);

我还建议您将 counter 变成一个参数,从而摆脱 static 状态:

public static boolean match(String x, String y) {
return match_helper(x, y, 0);
}

private static boolean match_helper(String x, String y, int counter) {
if (counter >= x.length()) {
return true;
}

if (x.charAt(counter) == y.charAt(counter)) {
return match_helper(x, y, counter + 1);
}

return false;
}

public static void main(String[] args) {
System.out.println(match("asdfasdf", "asdfasdf"));
}

您当前版本的 match() 不能多次使用,因为它会无意中保持调用之间的状态。上面建议的版本没有这个缺陷。

关于java - 递归在应该为真时返回假,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15758443/

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