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

Chat类中HashMap的put方法抛出NullPointerException空指针异常如何解决

问题根因

  • 你代码中的Chat类构造方法定义错误,导致成员变量HashMap<Integer, String> messages未完成初始化,调用put方法时触发空指针异常。
  • Java语法规定类的构造方法不能声明返回值类型,你给Chat()方法添加了void修饰符后,该方法就从构造方法变成了普通成员方法。执行new Chat()时只会调用编译器自动生成的无参空构造,你写的初始化逻辑不会被触发,messages始终为null。

解决方案

移除Chat()方法前的void修饰符即可,以下是修正后的完整代码:

import java.util.HashMap;
import java.util.Scanner;

class Chat {
    HashMap<Integer, String> messages;
    // 去掉void修饰符,恢复为类的构造方法
    Chat() {
        this.messages = new HashMap<>();
    }

    public void add(int id, String newMessage) {
        if (!newMessage.isEmpty()) {
            // 优化:id本身就是int类型,不需要重复转String再转int
            System.out.println(newMessage + "   " + id);
            this.messages.put(id, newMessage);
            // 原输出中的hashset是笔误,messages实际是HashMap
            System.out.println(messages.values() + "Added to hashmap");
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Chat obj = new Chat();
        int size = Integer.parseInt(sc.nextLine());
        for (int i = 0; i < size; i++) {
            String str = sc.nextLine();
            if (!str.isEmpty()) {
                obj.add(i + 1, str);
            }
        }
        sc.close();
    }
}

其他优化建议

  • 你代码中Integer.parseInt(String.valueOf(id))属于冗余操作,id本身就是int类型,可直接使用。
  • 输出日志中提到的hashset是笔误,messages的类型是HashMap。
  • Scanner使用完毕后建议调用close()方法释放资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:24:02