Java中返回值为float的方法如何在未查询到对应值时返回null
解决方案
核心问题分析
- 基础数据类型
float是值类型,不能返回null,只有引用类型的包装类Float支持返回null - 原有代码依赖捕获
NoSuchElementException判断文件读取结束属于逻辑错误,Scanner.nextLine()在无内容时直接抛出异常,不会返回null - 原有代码即使匹配到对应账号也会继续遍历全部文件内容,执行效率低,且遍历结束后无论是否匹配都会抛出异常,无法区分「正常读完未找到」和「读取错误」
优化后代码
public Float getBalance(int accountNo) throws FileNotFoundException { Scanner reader = new Scanner(new FileReader(bankfile)); try { while (reader.hasNextLine()) { String currentline = reader.nextLine(); String line[] = currentline.split(","); if (Integer.parseInt(line[0]) == accountNo) { // 匹配到账号直接返回余额,无需继续遍历 return Float.parseFloat(line[1]); } } // 遍历完所有行未找到对应账号 System.out.println("The account number is not found"); return null; } finally { // 关闭文件流避免资源泄漏 reader.close(); } }
调用说明
调用该方法时,返回值为Float类型,如果你需要转换为基础类型float,请先判断返回值非空再转换,避免触发空指针异常:
Float balance = name.getBalance(6); if (balance != null) { System.out.println(balance); }
调整后查询不存在的账号时,只会打印账号未找到的提示,返回null,不会输出0.0,也不会和正常余额为0的账号产生逻辑冲突。
内容的提问来源于stack exchange,提问作者ronron681
相关产品推荐
相关产品推荐

