gpt4 book ai didi

java - 为什么 `--var` 和 `var-1` 的工作方式不同?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:26:33 26 4
gpt4 key购买 nike

我确实写了一段代码来打印 n 对括号的所有有效组合。然而,在我第一次尝试时,算法将所有组合输出两次,即 .代码是:

public static void solve(char[] string, int open, int closed, int index)
{
if (open < 0 || closed < open) {
return;
}

if (open == 0 && closed == 0) {
System.out.println(string);
}

if (open > 0) {
string[index] = '(';
solve(string, --open, closed, ++index);
}

if (closed > open) {
string[index] = ')';
solve(string, open, --closed, ++index);
}
}

我花了很多时间来查看哪里出了问题。我认为代码进入最后一个 if 分支的次数超出了应有的范围。然后,在尝试不同的事情时,我意识到改变

solve(string, --open, closed, ++index);

solve(string, open-1, closed, ++index);

改变了结果。这导致出现 java.lang.ArrayIndexOutOfBoundsException。最后,我用相应的算术运算(例如,++indexindex+1)替换了所有预自增操作,代码运行正确。

我的问题是,--openopen-1 不应该计算和发送相同的值作为函数的参数吗?当它们应该计算相同的值时,代码为何表现不同?

最佳答案

solve(string, --open, closed, ++index);

实际上将 open 更改为比以前小 1,这使得 open 的下一次使用比传入的值小 1。

solve(string, open-1, closed, ++index);

...另一方面,将 open-1 传递到 solve 方法中,但没有更改 open,因此使用时保持不变在后面的语句中使用时。

关于java - 为什么 `--var` 和 `var-1` 的工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23448740/

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