如何用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
相关产品推荐
相关产品推荐

