长度为5的固定数组如何读取文件中最多5个数字避免索引越界
问题原因
你触发数组越界的核心原因是:当文件内数值总数大于数组长度(5)时,for循环的迭代次数等于文件总数值数,会访问到store[5]及以后的下标,而长度为5的数组最大合法下标仅为4。同时你现在两次读取文件的逻辑属于冗余操作,可以优化为单次读取。
修正后实现代码
System.out.println("Input the file name"); names = ff.nextLine(); // 提前初始化长度为5的存储数组 int[] store = new int[5]; int count = 0; // 记录已存入的数值数量 try { File f = new File(names); Scanner inputFile = new Scanner(f); // 循环终止条件:文件无更多数值 或 已存入5个数值 while (inputFile.hasNextInt() && count < store.length) { store[count] = inputFile.nextInt(); count++; } inputFile.close(); } catch (IOException e) { System.out.println("The file is not exist"); }
实现说明
- 无需提前统计文件内的数值总数,仅需单次读取文件即可完成存入操作,性能更优
- 天然兼容文件数值不足5个的场景,有多少个就存多少个,不会出现空读问题
- 循环最多执行5次,不会访问超过数组长度的下标,彻底避免越界异常
- 符合需求要求:最多仅存入5个数值,不需要输出到屏幕
内容的提问来源于stack exchange,提问作者Eren
相关产品推荐
相关产品推荐

