我正在尝试做一个递归方法,它通过一些规则返回一些随机字符。该方法效果很好,但问题是它不会返回我需要的值,也不会在我写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();
应该停止方法并返回值,但它不会。请帮我找出我的方法有什么问题。
非常感谢任何帮助。
答案 0 :(得分:3)
当您致电RowGenerator(sir);
时,它不会返回。这意味着忘记了结果并继续进行方法处理。
由于最终代码块(包含Log
和return 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)
就足够了。