You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:03:11