1

我正在进行单词匹配递归,但是遇到了问题。我有一个 if 语句,如果该语句为真,它将返回真。我有一个 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"));
    }
}

当你运行它时,它会打印“运行这个方法”,但是它会返回 false,当它应该返回 true 时......有人可以告诉我是什么原因造成的以及我将如何解决它?

4

3 回答 3

5

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()不能多次使用,因为它会无意中在调用之间保持状态。上面提议的版本没有这个缺陷。

于 2013-04-02T07:27:03.737 回答
2

你应该return match(x, y);在你的第二个if。这是递归的主要原理。

于 2013-04-02T07:27:48.143 回答
0

只有被调用函数的第一个实例返回输出。但只有 counter >= x.length() 的实例具有显示文本的副作用。

于 2013-04-02T07:29:21.320 回答