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

Java ArrayList命令行单词存储程序在Eclipse中运行异常求助

问题分析与解决建议

看起来你遇到的核心问题是混淆了Eclipse中「程序参数」和「标准输入」的区别,导致程序一直在等待输入,没有执行后续逻辑。咱们一步步来拆解:

1. 为什么程序没正常运行?

你的read()方法用Scanner(System.in)读取的是标准输入(控制台输入),但你在Eclipse的「运行配置」里输入的内容是程序启动参数(也就是main方法里的args数组),这俩完全不是一回事。所以程序启动后会卡在scanner.hasNext()这里,一直等你在控制台手动输入内容,自然不会执行后面的find和subsequence逻辑。

2. 两种解决思路

思路一:修改代码读取程序参数(更符合你当前的操作习惯)

如果想直接用Eclipse运行配置里输入的文本作为数据源,可以把read()方法改成读取main方法的args数组,这样输入的每个单词会被自动拆分到args里:

// 替换原来的read方法,或者新增一个方法接收args
public void readFromArgs(String[] args) {
    for (String word : args) {
        // 处理掉句子里的标点(比如你输入的dog.),避免影响匹配
        String cleanedWord = word.replaceAll("[^a-zA-Z]", "");
        list.add(cleanedWord);
    }
}

然后修改main方法:

public static void main(String[] args){
    Search search = new Search();
    // 改用新方法读取程序参数
    search.readFromArgs(args);
    search.find("the");
    for(String s : search.subsequence(new int[]{0, 3, 4}))
        System.out.println(s);
}

思路二:保留原代码,在Eclipse中输入标准输入

如果你想继续用Scanner(System.in)读取输入,那在Eclipse里启动程序后,不要在运行配置里填参数,而是在控制台窗口手动输入你的测试文本,输入完后按Ctrl+Z(Windows)或Ctrl+D(Mac/Linux)来结束输入,这样程序就会继续执行后续逻辑了。

3. 其他小优化建议

  • 你的subsequence方法已经做了索引越界检查,这点很赞!
  • 如果想更清晰地展示"the"的出现位置,可以优化find方法:
public void find(String word){
    ArrayList<Integer> positions = new ArrayList<>();
    for(int i = 0; i < list.size(); i++) {
        if(list.get(i).equalsIgnoreCase(word)) {
            positions.add(i);
        }
    }
    System.out.println("\"" + word + "\"出现的位置:" + positions);
}

这样调整后,你的程序就能正常运行啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:33:13