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

增强for循环执行时hasNext()为空,变量tName返回null问题求助

问题排查与解决方案

核心问题分析

  • 集合为空:增强for循环依赖迭代器工作,hasNext()返回空说明toys这个ArrayList本身没有存入任何玩具对象,自然无法搜索到结果。
  • 搜索逻辑与调用缺陷:现有代码会遍历所有元素,仅保留最后一个匹配项;若没有匹配结果,直接调用tName.format()会触发空指针异常导致程序终止。

修复步骤

1. 确认集合初始化与数据填充

先检查toys集合是否完成初始化,且已添加子类实例:

// 确保集合初始化
private ArrayList<Toys> toys = new ArrayList<>();

// 示例:添加子类对象
toys.add(new Figures("Star Wars Figure"));
toys.add(new BoardGames("Star Board Game"));

2. 优化搜索方法

private Toys searchByToy(String toyName) {
    // 提前判断集合状态,避免无效遍历
    if (toys == null || toys.isEmpty()) {
        System.out.println("暂无玩具数据");
        return null;
    }
    String keyword = toyName.toLowerCase();
    for(Toys t: toys) {
        if (t.getToyName().toLowerCase().contains(keyword)) {
            // 找到第一个匹配项立即返回,减少不必要遍历
            return t;
        }
    }
    System.out.println("未找到包含关键词[" + toyName + "]的玩具");
    return null;
}

3. 调用处增加空值判断

在调用format()前检查对象是否为空,避免程序异常终止:

String name = appMenu.promptToyName();
Toys tName = searchByToy(name);
if (tName != null) {
    System.out.print(tName.format());
}

额外注意事项

  • 确保Toys抽象类的所有子类都正确实现了getToyName()方法,避免触发空指针异常
  • 若需要返回所有匹配的玩具,可将方法返回类型改为List<Toys>,遍历过程中收集所有符合条件的对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:12:53