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

PowerShell脚本字母成绩显示System.Object[]错误,求修复方案

PowerShell学生成绩评估脚本字母成绩显示异常修复

问题说明

你的PowerShell脚本中,菜单第3项「显示对应字母成绩」功能异常:当成绩≥60分时,输出结果为System.Object[]而非正确的字母等级,仅D(≥50)和F能正常显示,其余功能运行正常。

问题根源

  1. 错误使用-wildcard参数:你的switch语句误用了-wildcard模式,这里是数值范围判断,不需要通配符匹配,该参数会干扰条件逻辑;
  2. 缺少分支终止逻辑:基于脚本块的switch条件中,未添加break终止后续匹配。例如85分同时满足≥80、≥70、≥60三个条件,会返回包含'A','B','C'的数组,输出时就显示为System.Object[];而D和F仅匹配单个条件,所以能正常显示单个值。

修复后的完整脚本

param (
    [int]$grade1,
    [int]$grade2,
    [int]$grade3,
    [int]$grade4,
    [int]$grade5,
    [int]$grade6
)

# 成绩数组
[int[]]$grades =($grade1, $grade2, $grade3, $grade4, $grade5, $grade6)

# 主菜单循环
do {
Clear-Host
$enteredGrades = "Your Grades: $($grades -join ', ')"
Write-Host "Student Assessment Program:"
Write-Host ""
Write-Host $enteredGrades
Write-Host ""
Write-Host "Menu Options:"
Write-Host "  1. Calculate Average"
Write-Host "  2. Credit Count"
Write-Host "  3. Display Letter Grade"
Write-Host "  4. Exit"
Write-Host ""
$choice = Read-Host "Select a Menu Option"

switch ($choice) {
        1 {
           # 计算平均分
           $average = [math]::Round(($grades | Measure-Object -Average).Average, 9)
           $color = if ($average -ge 60) { 'Green' } else { 'Red' }
           Write-Host "Average: $($average -as [string])" -ForegroundColor $color
           Read-Host "Press Enter to continue..."
           }
        2 {
            # 计算获得学分数量
            $credits = ($grades | Where-Object { $_ -ge 50 }).Count
            Write-Host "Credits Earned: $credits"
            Read-Host "Press Enter to continue..."
            }
         3 {
             # 显示字母成绩
            for ($i = 0; $i -lt $grades.Length; $i++) {
            $classNumber = $i + 1
            $letterGrade = switch ($grades[$i]) {
                {$_ -ge 80} { 'A'; break }
                {$_ -ge 70} { 'B'; break }
                {$_ -ge 60} { 'C'; break }
                {$_ -ge 50} { 'D'; break }
                default { 'F' }
            }
            Write-Host ("Class {0}: {1}" -f $classNumber, $letterGrade)
        }
        Read-Host "Press Enter to continue..."
}
         4 {
            # 退出程序
            Write-Host "Exiting the program."
             }
        default {
            Write-Host "Invalid choice. Please select 1, 2, 3, or 4."
            Read-Host "Press Enter to continue..."
            }
     }
} while ($choice -ne '4')

关键修改点

  • 移除switch语句的-wildcard参数,回归数值比较的逻辑;
  • 在每个字母分支的输出后添加break,确保匹配到第一个符合条件的等级后立即终止判断,只返回单个字母值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:33:17