You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 16:06:26