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

如何用while循环读文件并结合for循环实现带编号的选项展示?

问题:while循环内的for循环不执行,无法显示选择编号

我想用while循环读取文件内容并通过split()分割每行数据,再用for循环为每行内容添加选择编号(如1、2、3)后展示。但当前代码中while循环内的for循环完全不执行,移除for循环时代码可正常运行,求解决办法。

原代码示例

try
{
    BufferedReader br = new BufferedReader(new FileReader(path));
    while((line = br.readLine()) != null) {
        String[] values = line.split(",");
        for (int i = 0; i < zoo.size(); i++) {
            System.out.println("Select your choice.\nPress" + (i + 1) + ". (4Legged): " + values[0] + ", (insect):" + values[1] + ", (bird): " + values[2] );
        }
    }
}

文本文件内容

Monkey, Ant, Crow
Cat, Spider, Chicken
Dog, Grasshopper, Magpie

期望输出

Select your choice.
Press 1. (4Legged): Monkey, (Insect): Ant, (Bird): Crow
Press 2. (4Legged): Cat, (Insect): Spider, (Bird): Chicken
Press 3. (4Legged): Dog, (Insect): Grasshopper, (Bird): Magpie

解决方案

问题根源是你用zoo.size()作为for循环的终止条件,但从代码逻辑来看,zoo集合应该是空的,导致循环次数为0,自然不会执行。要实现给每行内容加编号的需求,不需要依赖这个集合,用一个计数器变量即可。

修改后的代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class AnimalChoice {
    public static void main(String[] args) {
        String path = "你的文件路径"; // 替换为实际文件路径
        try {
            BufferedReader br = new BufferedReader(new FileReader(path));
            int choiceNum = 1;
            System.out.println("Select your choice."); // 仅打印一次提示
            
            String line;
            while ((line = br.readLine()) != null) {
                String[] values = line.split(",");
                // 直接用计数器生成编号,无需多余的for循环
                System.out.printf("Press %d. (4Legged): %s, (Insect): %s, (Bird): %s%n", 
                        choiceNum, values[0].trim(), values[1].trim(), values[2].trim());
                choiceNum++;
            }
            br.close(); // 关闭IO流
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

关键修改点:

  • 新增choiceNum变量从1开始计数,每处理一行自增1,对应输出的编号。
  • 将提示语Select your choice.移到while循环外,避免重复打印。
  • 用trim()处理分割后的字符串,去掉逗号后的空格,让输出格式更整齐。
  • 补充了完整的异常捕获和流关闭逻辑,避免资源泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:25:04