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

基于文件内容创建含单词与分数的ArrayList及打印问题排查

解决存储单词与分数的ArrayList问题及打印无输出的排查

核心问题梳理

你需要用ArrayList同时存储从文件读取的单词和对应分数,目前遇到打印语句无输出的情况,主要有几个关键问题需要修复:


1. 先确认对象实例化的语法

你之前的代码里创建NewList对象时漏了new关键字,正确的写法是:

wordlist.add(new NewList(value, word));

如果没加new,代码根本无法编译,这是基础语法错误,先确保已经修正。


2. 打印无输出的关键原因:未重写toString()

你的NewList类没有重写Object类的toString()方法,直接打印ArrayList或者NewList对象时,JVM会默认输出对象的哈希地址(比如NewList@7852e922),看起来像是没输出,但其实是输出了无意义的内容。

修改NewList类,添加toString()方法:

public class NewList {
    private int value;
    private String word;

    public NewList(int value, String word) {
        this.value = value;
        this.word = word;
    }

    // 重写toString,让打印显示实际的单词和分数
    @Override
    public String toString() {
        return "[" + word + ": " + value + "]";
    }
}

这样再打印wordlist,就能看到每个元素的具体内容了。


3. 输入流重复读取的坑

如果你之前已经用同一个in对象读取过一遍文件(比如最初的words.add(in.next())那段代码),输入流的指针已经走到文件末尾,第二次调用in.hasNext()会直接返回false,循环根本不会执行,自然没有输出。

解决办法:

  • 重新创建输入流对象,指向目标文件;
  • 把两次读取逻辑合并,避免重复使用已读完的输入流。

合并后的示例代码:

// 重新打开输入流(假设是FileScanner)
Scanner in = new Scanner(new File("你的文件路径.txt"));
ArrayList<NewList> wordlist = new ArrayList<>();

// 先判断是否有整数(分数),避免格式错误导致异常
while (in.hasNextInt()) {
    int value = in.nextInt();
    // 确保后面还有单词
    if (in.hasNext()) {
        String word = in.next();
        wordlist.add(new NewList(value, word));
    }
}

// 循环结束后打印整个列表
System.out.println(wordlist);

4. 文件格式必须匹配读取逻辑

确保你的文件内容是分数 单词成对出现的格式,比如:

80 hello
90 world
75 java

如果文件格式混乱(比如先单词后分数、空行、单个数值/单词),in.nextInt()会抛出InputMismatchException,导致循环提前终止,也会出现无输出的情况。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:20:48