我在找到的一项运动中遇到了一些问题。
我提供了一种方法,无法对其进行任何更改。
在所述方法中,我应该识别第一个重复数字,beetwen两个整数,并返回它的位置。
例如:1234和4231结果为1.
我设法让它发挥作用,
如果我尝试不止一次使用该方法,它就无法工作,它只是不断添加到以前的值。
这是我目前的代码
public static final int BASENUMERACAO = 10;
public static int indice = 0;
private static int getLowestIndexWithSameDigit(int a, int b) {
if (a < 0 || b < 0) {
throw new IllegalArgumentException("Both numbers should positive " + a + " " + b);
} else {
if (a % BASENUMERACAO == b % BASENUMERACAO) {
return indice;
} else if (a / BASENUMERACAO != 0 && b / BASENUMERACAO != 0) {
indice++;
return getLowestIndexWithSameDigit(a / BASENUMERACAO, b / BASENUMERACAO);
} else {
return -1;
}
}
我尝试将index作为局部变量传递,但它只是覆盖了curent值,每次调用它时,因此只返回0或-1
有人可以告诉我如何以递归方法计算,或者我如何识别计数器上的数字?
答案 0 :(得分:0)
创建另一个方法来调用递归方法,并使用您需要的变量作为递归版本的参数并继续传递它们。
类似的东西:
private static int myMethod( int a, int b ) {
return myRecursiveMethod( a, b, 0, 0 );
}
private static int myRecursiveMethod( int a, int b, int var1, int var2 ) {
// do the recursive work...
myRecursiveMethod( newValueForA, newValueForB, var1, var2 ) {
}
答案 1 :(得分:0)
问题是您在indice
变量中保留了先前调用的状态。 indice
是可变全局状态的一个示例,由于您在此遇到的原因,这通常是一个坏主意:您可能会将先前计算的结果转移到新计算中,从而导致不可预测(或可能是意外)的结果。
将indice
变量设为方法的参数:
private static int getLowestIndexWithSameDigit(int a, int b, int indice) {
// ...
}
因此,您的递归调用也会传递一个值:
return getLowestIndexWithSameDigit(a / BASENUMERACAO, b / BASENUMERACAO, indice);
要开始迭代,您可以显式传递0,也可以创建一个只带a和b的方法:
private static int getLowestIndexWithSameDigit(int a, int b) {
return getLowestIndexWithSameDigit(a, b, 0);
}