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

如何用Dart/JavaScript实现NATA多场次成绩的规则计算?

Dart/JavaScript 实现 NATA 成绩计算逻辑方案

核心需求回顾

  • 必填输入:12年级得分、对应考试满分
  • 可选输入(至少填1个):3次NATA考试得分
  • 计算规则:
    • 仅1个有效NATA成绩 → 返回该成绩
    • 2个有效NATA成绩 → 返回两者平均值
    • 3个有效NATA成绩 → 取分数较高的两个计算平均值

Dart 实现代码

先封装核心计算逻辑为独立函数,替换原print语句的关键是将计算结果对接实际业务场景(如页面展示、数据存储等):

// 核心计算函数:处理NATA成绩逻辑
double calculateNataScore(List<double?> nataScores) {
  // 过滤空值,保留有效成绩
  List<double> validScores = nataScores.where((score) => score != null).cast<double>().toList();

  switch (validScores.length) {
    case 1:
      return validScores.first;
    case 2:
      return (validScores[0] + validScores[1]) / 2;
    case 3:
      // 升序排序后取后两个(较高的分数)计算平均
      validScores.sort();
      return (validScores[1] + validScores[2]) / 2;
    default:
      throw Exception("至少需要填写1个NATA成绩");
  }
}

void main() {
  // 模拟用户输入(实际场景可从表单/控制台获取)
  double twelfthGradeScore = 92.5;
  double twelfthMaxScore = 100.0;
  // 示例:用户填了2个NATA成绩,第三个留空
  List<double?> userNataScores = [115.0, 128.0, null];

  try {
    double finalNataScore = calculateNataScore(userNataScores);
    // 替换原print语句:根据业务需求处理结果
    // 控制台输出示例
    print("12年级得分: $twelfthGradeScore/$twelfthMaxScore");
    print("最终NATA有效得分: ${finalNataScore.toStringAsFixed(2)}");
    // Web场景下可更新DOM,例如:
    // document.getElementById('nata-result')?.textContent = "最终NATA有效得分: ${finalNataScore.toStringAsFixed(2)}";
  } catch (error) {
    print(error.toString());
  }
}

JavaScript 实现(可选)

如果需要在Web前端实现,逻辑完全一致:

function calculateNataScore(nataScores) {
  // 过滤无效值(空、NaN)
  const validScores = nataScores.filter(score => score !== null && !isNaN(score));

  switch (validScores.length) {
    case 1:
      return validScores[0];
    case 2:
      return (validScores[0] + validScores[1]) / 2;
    case 3:
      validScores.sort((a, b) => a - b);
      return (validScores[1] + validScores[2]) / 2;
    default:
      throw new Error("至少需要填写1个NATA成绩");
  }
}

// 调用示例
const twelfthGradeScore = 92.5;
const twelfthMaxScore = 100.0;
const userNataScores = [115, 128, null];

try {
  const finalScore = calculateNataScore(userNataScores);
  // 替换console.log,更新页面元素
  document.getElementById('twelfth-score').textContent = `${twelfthGradeScore}/${twelfthMaxScore}`;
  document.getElementById('nata-result').textContent = `最终NATA有效得分: ${finalScore.toFixed(2)}`;
} catch (err) {
  console.error(err.message);
}

关键说明

  1. 输入处理:通过过滤空值/无效值,确保只计算用户实际填写的成绩
  2. 逻辑分支:用switch替代if-else让代码更清晰,覆盖所有合法输入场景
  3. 结果替换:原print语句可替换为业务需求的操作——控制台输出用于调试,DOM更新用于Web页面展示,数据存储则可将结果写入后端接口或本地存储

内容的提问来源于stack exchange,提问作者Stay Foolish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:25:24