Java递归计数问题:多次调用方法结果累加异常求助
解决静态方法多次调用结果累加的问题
嘿,我猜你大概率是在方法里用了静态变量来记录中间状态(比如标记数字是否出现过的数组、位置计数器这类),这就是问题的根源!静态变量属于整个类,不是每次调用方法都会重新初始化的,所以第二次调用的时候,它还留着上一次调用的值,自然就会累加出错啦。
给你举个例子,假设你原来的代码里有类似这样的静态变量:
public static final int BASENUMERACAO = 10; // 坑就在这:静态变量,多次调用不会自动重置 private static boolean[] seenDigits = new boolean[BASENUMERACAO]; private static int currentPosition = 0; public static int findFirstDuplicate(int numA, int numB) { // ... 你的逻辑代码 }
要解决这个问题很简单,把这些静态变量改成方法内部的局部变量就行!每次调用方法时,局部变量都会重新创建并初始化,完全不会受之前调用的影响。
下面是修正后的完整示例代码,完全符合你的需求(找两个整数中第一个重复数字的位置):
public static final int BASENUMERACAO = 10; public static int findFirstDuplicate(int num1, int num2) { // 局部变量:每次调用都会重新初始化,状态独立 boolean[] seenDigits = new boolean[BASENUMERACAO]; int position = 0; // 先遍历第一个数字的每一位,标记已经出现过的数字 int tempNum = num1; while (tempNum > 0) { position++; int digit = tempNum % BASENUMERACAO; seenDigits[digit] = true; tempNum /= BASENUMERACAO; } // 再遍历第二个数字的每一位,找第一个已经标记过的数字 tempNum = num2; while (tempNum > 0) { position++; int digit = tempNum % BASENUMERACAO; if (seenDigits[digit]) { return position; } tempNum /= BASENUMERACAO; } // 如果没有找到重复数字,返回-1(可根据你的需求调整返回值) return -1; }
你可以测试一下,比如第一次调用findFirstDuplicate(1234, 4231)会返回1,第二次再调用其他参数(比如findFirstDuplicate(567, 789)),结果也会完全正确,不会再出现累加的问题啦。
内容的提问来源于stack exchange,提问作者Eddoasso
相关产品推荐
相关产品推荐

