Dart类型错误求助:'int?'无法赋值给'num'及奇偶求和代码问题
解决Dart代码中奇数偶数求和的空安全报错问题
报错的核心原因是未给列表指定明确的数值类型,在Dart空安全规则下,默认声明的List属于List<dynamic>,其元素会被推断为可空的dynamic?类型,直接参与数值运算时就会触发'int?'无法赋值给'num'的类型错误。
修改步骤
- 给所有存储整数的列表指定
List<int>类型,明确元素为非空整数 - 这样后续从列表中取出的元素类型会被正确推断,不会触发空安全相关错误
修正后的完整代码
void main() { List<int> numbers = [1, 2, 3, 4]; List<int> odd = []; List<int> even = []; for (int i = 0; i < numbers.length; i++) { var z = numbers[i] % 2; if (z == 0) { even.add(numbers[i]); } else { odd.add(numbers[i]); } } int sumOdd = 0; int sumEven = 0; for (int i = 0; i < odd.length; i++) { sumOdd += odd[i]; } for (int i = 0; i < even.length; i++) { sumEven += even[i]; } print("sum of odds numbers = $sumOdd"); print("sum of even numbers = $sumEven"); }
额外优化建议
可以用Dart的fold方法简化求和逻辑,替代嵌套的for循环,让代码更简洁:
// 替换原有求和的两个for循环 int sumOdd = odd.fold(0, (prev, curr) => prev + curr); int sumEven = even.fold(0, (prev, curr) => prev + curr);
内容的提问来源于stack exchange,提问作者munsef khasawneh
相关产品推荐
相关产品推荐

