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

变量已声明初始化仍出现NullPointerException问题求助

Bulls and Cows游戏NullPointerException问题排查与解决

原因分析

从运行日志1234 null可以明确,computerGuess变量为null,直接导致调用countCompBulls方法时传入的Cguess参数为null,触发NullPointerException。

追根溯源到getComputerGuess方法:当attempt == 1时,方法返回getSecretCode()的结果。出现null说明计算机的秘密代码(secret code)未被正确初始化,getSecretCode()返回了null值。也就是说,游戏启动时,EasyAi类没有预先生成自己的随机秘密代码,导致第一次调用getComputerGuess时返回null。

另外,countCompBulls方法内部存在逻辑错误:int ctr = 0; setCompBulls(ctr++);会始终将公牛数设置为0,因为ctr++是后置自增,先返回初始值0再自增,无法实现计数累加。

解决方案

1. 初始化计算机的秘密代码

在EasyAi类的构造方法中,提前生成计算机的秘密代码,确保getSecretCode()能返回有效字符串:

public class EasyAi {
    private String secretCode;
    private int codeLength = 4; // 假设代码长度固定为4

    public EasyAi() {
        // 构造方法中初始化计算机秘密代码
        this.secretCode = generateUniqueRandomCode();
    }

    public String getSecretCode() {
        return secretCode;
    }

    // 其他已有方法...
}

2. 修复getComputerGuess方法的逻辑(可选优化)

确保无论attempt是否为1,都能返回有效代码,同时避免重复生成初始秘密代码:

public String getComputerGuess(int attempt) {
    if (attempt == 1){ 
        // 此时secretCode已在构造方法初始化,不会返回null
        return getSecretCode();
    }
    return generateUniqueRandomCode();
}

3. 修复countCompBulls方法的计数逻辑

修正公牛数的累加方式,正确统计匹配的位数:

public void countCompBulls(String Cguess, String UsecretCode) {
    int bullCount = 0;
    for (int i = 0; i < getCodeLength(); i++) {
        if (Cguess.charAt(i) == UsecretCode.charAt(i)) {
            bullCount++;
        }
    }
    setCompBulls(bullCount);
}

4. 增加空值校验(防御性编程)

在countCompBulls和countCompCows方法中添加空值判断,避免后续再次出现类似异常:

public void countCompBulls(String Cguess, String UsecretCode) {
    if (Cguess == null || UsecretCode == null || Cguess.length() != getCodeLength() || UsecretCode.length() != getCodeLength()) {
        setCompBulls(0);
        return;
    }
    int bullCount = 0;
    for (int i = 0; i < getCodeLength(); i++) {
        if (Cguess.charAt(i) == UsecretCode.charAt(i)) {
            bullCount++;
        }
    }
    setCompBulls(bullCount);
}

内容的提问来源于stack exchange,提问作者Johann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:55:20