如何在PowerShell中将数组数值平均值显示在Windows消息框?
解决PowerShell平均分无法在Windows消息框显示的问题
问题分析
原代码存在以下关键问题,导致无法正常在消息框展示平均分:
- 未初始化控制输入数量的
$Arraysize变量,循环逻辑混乱,无法限制最多输入5个分数 - 输入验证逻辑失效:正则表达式
[0-100]$无法正确匹配0-100的有效分数,且未将输入转换为数值类型,会影响平均分计算的准确性 - 消息框调用完全错误:错误地将分数列表赋值给
MessageBoxButton枚举类型,未使用MessageBox类的Show()方法来展示内容
修正后的完整代码
# 初始化变量:最多允许输入5个有效分数 $maxInputCount = 5 $validInputCount = 0 $StudentMarkList = @() # 匹配1-3位数字的正则 $numberRegex = '^\d{1,3}$' do { $inputContent = Read-Host "请输入学生分数(0-100)" # 验证输入是否为数字,且数值在0-100范围内 if ($inputContent -match $numberRegex) { $mark = [int]$inputContent if ($mark -ge 0 -and $mark -le 100) { $StudentMarkList += $mark $validInputCount++ } else { Write-Host "错误:分数必须在0-100之间,请重新输入" } } else { Write-Host "错误:请输入有效的数字分数" } } while ($validInputCount -lt $maxInputCount) # 计算并格式化平均分 if ($StudentMarkList.Count -gt 0) { $average = ($StudentMarkList | Measure-Object -Average).Average $showText = "学生分数平均分:{0:N2}" -f $average } else { $showText = "未输入任何有效分数" } # 加载程序集并显示消息框 Add-Type -AssemblyName PresentationCore, PresentationFramework [System.Windows.MessageBox]::Show($showText, "平均分结果", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Information)
关键修正说明
- 输入控制:用
validInputCount跟踪有效输入的数量,无效输入不会占用输入次数,确保能收集到最多5个有效分数 - 输入验证:先验证输入格式为数字,再转换为整数并检查范围,保证分数的有效性
- 平均分处理:基于数值类型的分数列表计算平均分,用格式化字符串保留两位小数,提升可读性
- 消息框调用:使用
[System.Windows.MessageBox]::Show()方法,传入要展示的平均分文本、窗口标题、按钮样式和图标,正确完成消息框展示
内容的提问来源于stack exchange,提问作者tsl
相关产品推荐
相关产品推荐

