在java中停止并返回递归方法的值

时间:2013-09-10 10:19:42

标签: java android string methods recursion

我正在尝试做一个递归方法,它通过一些规则返回一些随机字符。该方法效果很好,但问题是它不会返回我需要的值,也不会在我写return myString时停止

这是方法(请看一下评论):

 public String RowGenerator(String sir) {

    upper = "";

    Log.v(TAG, "RowGenerator Started");
    int randI = 1 + (int)(Math.random() * 4);
    int randJ = 1 + (int)(Math.random() * 2);
    int randK = 1 + (int)(Math.random() * 2);
    Log.v(TAG, "inside RowGenerator: randI " + randI + ", randJ " + randJ + ", randK "+ randK);

    String upper = sir.replaceAll("[^A-Z]+", "");
    sir = sir.replaceAll("[^a-z]+", "");

    Log.v(TAG, "String upper " + upper);

//checking if there is a..z & sir>=5
    if ((sir.length()>=5) && upper.isEmpty()) {
        Log.v(TAG, "sir <5 & !b " + String.valueOf(sir));  // here it prints out exactly what i need, but when i setText id has another value.
        sir1.setText(String.valueOf(sir));  // this textview does not get the right value.
        return sir; // i want to end the function here and return the value , as i call it as follows: someString = String.valueOf(RowGenerator(sir))
    } else if (sir.isEmpty()) {
        sir = S[1];
        Log.v(TAG, "First sir value: " + sir);
        RowGenerator(sir);
    }  else if (sir.length()<5 && upper.isEmpty()) {
        sir = "";
        RowGenerator(sir);
    }
     // if there is A..Z
    else if (!upper.equals(null)) {
        if(upper.equals(S[0])) {
            sir = sir + S[1];
        } else if (upper.equals(I[0])) {
            sir = sir + I[randI];
        } else if (upper.equals(J[0])) {
            sir = sir + J[randJ];
        } else if (upper.equals(K[0])) {
            sir = sir + K[randK];
        }
        Log.v(TAG, "new value added to sir: " + sir);
        RowGenerator(sir);

    }
    Log.v(TAG, "returning value ");  // everything goes great till here, but then this log appears like 5-20 times randomly at each start, it should end in first if, but it got till here
    sir1.setText(String.valueOf(sir));
    return sir; 
}

据我所知,return myString();应该停止方法并返回值,但它不会。请帮我找出我的方法有什么问题。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

当您致电RowGenerator(sir);时,它不会返回。这意味着忘记了结果并继续进行方法处理。

由于最终代码块(包含Logreturn sir;)不受每次执行的保护,因此打印许多日志。它还解释了为什么最终结果不正确(在这些情况下,该方法返回它在参数中接收的值而不是递归)。

我猜您应该RowGenerator(sir);替换return RowGenerator(sir);以解决您的问题。

答案 1 :(得分:2)

RowGenerator(sir);语句更改为return RowGenerator(sir);

答案 2 :(得分:0)

实际上在递归方法中,return()动作将值返回到前一个函数调用。
例如,如果方法调用了自己4次,并且在第4次调用return()那么第3级中的方法将从执行第4次函数调用的行继续,依此类推,直到第一个函数执行return()
我不知道你的整个程序,但如果这是你的所有代码,那么简单的system.exit(1)就足够了。