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

Java使用Scanner读文件时while循环计数器i不递增问题求助

问题原因

你遇到的计数器无法正常递增的核心问题是变量初始化位置错误:

  • i = 0的赋值语句被放在了while循环内部,这意味着每一轮循环执行的第一步都会将i重置为0,哪怕你在循环末尾执行了i++操作,下一轮循环开始时i还是会被重新赋值为0,因此你每次打印i得到的结果都是0。
  • 你后续将i的赋值语句移到while循环外部的操作是正确的,计数器初始化逻辑只需要在循环开始前执行一次即可。
额外优化建议

你的代码还有两处容易触发后续问题的点,可以提前调整:

  1. Scanner资源关闭逻辑优化:当前你仅在catch块中关闭Scanner,如果代码正常执行完没有抛出异常,Scanner资源会一直处于未关闭状态造成资源泄漏。建议使用Java 7及以上支持的try-with-resources语法自动关闭资源,示例如下:
File file = new File("Reservation.txt");
// 写在try括号内的资源会在代码块执行结束后自动关闭,无需手动调用close
try (Scanner sc = new Scanner(file)) {
    sc.useDelimiter(",");
    int i = 0; // 计数器初始化放在循环外
    while (sc.hasNext()) {
        // 你的业务逻辑
        i++;
    }
} catch (NoSuchElementException e) {
    System.out.println("===============================");
}
  1. 对象引用覆盖问题修正:你当前代码中newRes[i] = readRec的写法会让数组所有元素都指向同一个readRec对象,后续循环修改readRec的属性时,数组中之前存入的所有元素的属性也会被同步覆盖。建议每次循环都新建一个对应的实例对象:
while (sc.hasNext()) {
    // 每次循环新建独立的实例,避免引用共享导致的数据覆盖
    Reservation readRec = new Reservation();
    newRes[i] = readRec;
    // 后续属性赋值、打印逻辑不变
    i++;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:45:04