为什么我无法在此方法中更改布尔变量的值

时间:2014-04-30 21:18:25

标签: java algorithm

   public static void isMatchHelper(String input, String pattern, boolean ret){
        if(pattern.length() == 0 && input.length() == 0){
            ret =  true;
        }
        else if(pattern.length() == 0){
            ret =  false;
        }
        else if(input.length() == 0){
            ret =  true;
        }
        if(pattern.length() == 0 || input.length() == 0){
                return;
        }
        else if(pattern.charAt(0) == input.charAt(0)){
                isMatchHelper(input.substring(1), pattern.substring(1), ret);
        }
        if(pattern.charAt(0) == '.'){
            isMatchHelper(input, pattern.substring(1), ret);
        }
        if(pattern.charAt(0) == '*'){
            if(pattern.length() > 1){
                int countMatches = 0;
                char compareWith = pattern.charAt(countMatches + 1);
                while( countMatches != input.length() && input.charAt(countMatches) == compareWith){
                    countMatches++;
                }
                isMatchHelper(input.substring(countMatches), pattern.substring(2), ret);
            }
            else{
                ret =  true;
            }
        }
        if(pattern.charAt(0) != input.charAt(0)){
            isMatchHelper(input, pattern.substring(1), ret);
        }

    }

我已经尝试输入它进入第一个输入,并且ret是真的,但是再次,当我检查它时ret的值仍然是假的。我知道这可能与传递值有关,我尝试传递一个布尔对象,并使用不起作用的Boolean.FALSE或Boolean.TRUE。我传递了一个带有1个参数的布尔数组,这很有效。

我的问题现在或多或少是一个概念问题,为了提高我的理解,我想知道为什么布尔值没有按计划运行。这是一个值得关注的问题,还是其他什么?我必须承认,在某些时候我认为使用布尔vs布尔可能是修复。

我期待着你的帮助。

1 个答案:

答案 0 :(得分:7)

由于这是Java,因此无法通过引用传递参数。

相反,只需从方法中返回值。

   public static boolean isMatchHelper(String input, String pattern) {
       boolean ret;
       .... // Rest of your code
       .... // Replace all return statements with return ret;
      return ret;
   }

为了清楚起见,因为函数是递归的,所以你可以像改变非递归调用一样改变递归调用:

这一行

isMatchHelper(input, pattern.substring(1), ret);

成为这一行:

ret = isMatchHelper(input, pattern.substring(1));