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

HashMap场景下登录验证cardData为null问题求助

问题分析与修复方案

核心问题:Database实例不共享

你在AddUser类中新建了一个Database实例并添加数据,但验证PIN的类里的database成员变量要么未初始化(触发Database is null错误),要么指向了另一个空实例——两个完全独立的实例导致数据无法共享,所以查询时找不到对应卡号的信息,返回null。

具体修复步骤

1. 保证使用同一个Database实例

方案一:实例传递(低耦合推荐)

修改验证类的构造逻辑,传入已填充数据的Database实例:

// 验证类的构造方法
public PinValidator(Database database) {
    this.database = database;
}

// 在AddUser中创建并传递实例
Database data = new Database();
data.addCardInfo(nmField.getText(), atmField.getText(), pinField.getText(), balField.getText());
// 初始化验证类时传入同一个实例
PinValidator validator = new PinValidator(data);

方案二:单例模式(全局唯一实例)

修改Database类为单例,确保所有代码使用同一个实例:

public class Database {
    private static final Database INSTANCE = new Database();
    private Map<String, String[]> cardPinMap = new HashMap<>(); 

    // 私有构造,禁止外部新建实例
    private Database() {}

    // 全局获取实例的方法
    public static Database getInstance() {
        return INSTANCE;
    }

    public void addCardInfo(String name, String cardNumber, String pin, String bal) {
        cardPinMap.put(cardNumber, new String[] { pin, name, bal });
    }

    public String getPinByCardNumber(String cardNumber) {
        String[] cardData = cardPinMap.get(cardNumber);
        return cardData != null ? cardData[0] : null;
    }
}

之后在所有需要使用Database的地方统一获取单例:

// AddUser中添加数据
Database data = Database.getInstance();
data.addCardInfo(nmField.getText(), atmField.getText(), pinField.getText(), balField.getText());

// 验证类中获取实例
private Database database = Database.getInstance();

2. 修复checkPin方法的空指针风险

当卡号不存在时getPinByCardNumber会返回null,直接调用equals会抛出空指针异常,必须先判空:

public boolean checkPin(String cardNumber, String enteredPin) {       
    String actualPin = database.getPinByCardNumber(cardNumber);         
    // 先确认actualPin不为null,再做比较;同时兼容enteredPin为空的场景
    return actualPin != null && actualPin.equals(enteredPin);   
}

额外排查点

  • 确认添加数据时atmField.getText()的卡号,和验证时输入的卡号完全一致(注意空格、数字格式,避免前后有不可见字符)
  • 检查addCardInfo的参数顺序是否正确:方法定义是(name, cardNumber, pin, bal),确认传入的参数没有顺序颠倒

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:15:22