PowerShell脚本字母成绩显示System.Object[]错误,求修复方案
PowerShell学生成绩评估脚本字母成绩显示异常修复
问题说明
你的PowerShell脚本中,菜单第3项「显示对应字母成绩」功能异常:当成绩≥60分时,输出结果为System.Object[]而非正确的字母等级,仅D(≥50)和F能正常显示,其余功能运行正常。
问题根源
- 错误使用
-wildcard参数:你的switch语句误用了-wildcard模式,这里是数值范围判断,不需要通配符匹配,该参数会干扰条件逻辑; - 缺少分支终止逻辑:基于脚本块的
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
相关产品推荐
相关产品推荐

