基于文件内容创建含单词与分数的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
相关产品推荐
相关产品推荐

