加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 04:19:55 所属栏目:Java 来源:网络整理
导读:我写了一个代码来打印所有有效的n对括号组合.但是,在我第一次尝试时,算法输出所有组合两次,即.代码是: public static void solve(char[] string,int open,int closed,int index){ if (open 0 || closed open) { return; } if (open == 0 closed == 0) { Sys
我写了一个代码来打印所有有效的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,++index);

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

改变了结果.这导致获得java.lang.ArrayIndexOutOfBoundsException.最后,我用相应的算术运算(例如索引到索引1)替换了所有预增量操作,并且代码正确运行.

我的问题是,不应该–open和open-1计算并将相同的值作为参数发送给函数?为什么代码在计算相同值时表现不同?

解决方法

solve(string,++index);

实际上,将open打开为比之前更少的一个,这使得下面的open的下一次使用就会比传入的值少1.

solve(string,++index);

…另一方面,将open-1传递给solve方法,但不会更改为open,因此在以后的语句中使用时它会保持不变.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读