Java如何扫描数组单索引内容并将值拆分赋值至独立数组
问题修正与实现方案
原代码存在的核心问题
- 缺失
java.util.Scanner的导入声明,运行会直接报错 - 循环逻辑嵌套错误,while读行循环和数组索引遍历的for循环顺序搞反,会出现行读取越界问题
- 赋值逻辑写反,注释中的
splitLines[0] = aPrize[i]是把空数组的值赋给拆分结果,和需求完全相反 - 多余的无效判断
if(fileLine.split(DELIM) != splitLines),每次调用split方法都会生成新的数组对象,这个判断永远为true,没有实际意义 - 初始化时提前调用了一次
nextLine(),会直接丢掉第一行奖品数据
修正后的可运行代码
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; // 新增缺失的Scanner导入 public class DrewCarey { public static void main(String[] args) throws FileNotFoundException { int min = 0; int max = 52; int randomIndex = (int)Math.floor(Math.random()*(max-min+1)+min); String[] aPrize = new String[53]; int[] aPrice = new int[53]; final String DELIM = "\t"; Scanner fileScanner = new Scanner(new File("PrizeFile.txt")); int index = 0; // 记录当前行对应的数组索引 // 逐行读取文件,只要还有行且索引没超过数组长度就继续 while(fileScanner.hasNextLine() && index < aPrize.length) { String fileLine = fileScanner.nextLine(); String[] splitLines = fileLine.split(DELIM); // 拆分后按索引赋值到对应数组 aPrize[index] = splitLines[0]; aPrice[index] = Integer.parseInt(splitLines[1]); index++; } fileScanner.close(); // 测试:输出随机抽取的奖品信息 System.out.println("随机抽到的奖品:" + aPrize[randomIndex]); System.out.println("对应价格:" + aPrice[randomIndex]); } }
逻辑说明
- 不需要用Scanner读取数组内部内容,字符串调用split方法拆分后返回的splitLines数组,
splitLines[0]就是当前行的奖品名称,splitLines[1]就是当前行的价格字符串,直接调用Integer.parseInt()转成int类型即可赋值给价格数组。 - 单独维护index变量作为数组下标,每读完一行索引加1,避免循环嵌套导致的逻辑混乱。
- 赋值完成后你预先定义的randomIndex就可以直接使用,通过
aPrize[randomIndex]和aPrice[randomIndex]就能拿到随机选中的奖品信息。
内容的提问来源于stack exchange,提问作者David Wamai
相关产品推荐
相关产品推荐

