Dart 2.12.2 环境下实现年龄计算的代码运行报错,问题出在哪?
代码存在的核心问题
- 变量传值错误:写解析逻辑时不小心给
birth_year加了双引号,代码会把字符串"birth_year"本身当作待解析内容,根本不会读取用户输入的年份值,直接触发格式解析异常。 - 循环逻辑错误:循环初始值
i=1,迭代步骤写的是i--,导致i从1开始逐次变小,永远满足i < 10的判断条件,程序会陷入无限循环根本停不下来,和预期的“循环9次计算年龄”的逻辑完全相反,正确的迭代步骤应该是i++。 - 空安全兼容问题:Dart 2.12 是首次落地空安全的稳定版本,
stdin.readLineSync()的返回值是可空的String?类型,没有做空值校验直接传给num.parse(),会直接触发类型不匹配的编译报错。
修正后的可运行代码
import 'dart:io'; void main() { for (var i = 1; i < 10; i++) { try { print("Your birth year is : "); var birthYear = stdin.readLineSync(); // 处理空输入的情况,适配空安全规则 if (birthYear == null) continue; // 移除多余的字符串引号,直接解析输入的年份值 var age = DateTime.now().year - num.parse(birthYear); print("$age"); } on FormatException { print("Invalid"); } } }
内容的提问来源于stack exchange,提问作者Mickel Antoine Naim
相关产品推荐
相关产品推荐

