在 PowerShell 中查找中间数

Posted

技术标签:

【中文标题】在 PowerShell 中查找中间数【英文标题】:Finding Middle Number in PowerShell 【发布时间】:2019-05-30 14:57:15 【问题描述】:

我正在使用 PowerShell 进行练习,并且正在进行用户响应输入,其中一个选项是输入 3 个数字,程序将返回中间数字。我已经这样做了一百万次,似乎我无法让它始终返回中间数字。

例如当我的数字是 1、23452342 和 3 时,它说 3 是中间数字。

这是我的代码:

if ($response -eq 1) 
    $a = Read-Host "Enter a number "
    $b = Read-Host "Enter a second number "
    $c = Read-Host "Enter a third number "

    if (($a -gt $b -and $a -lt $c) -or ($a -lt $b -and $a -gt $c)) 
        Write-Host "$a is the middle number"
    
    if (($b -gt $a -and $b -lt $c) -or ($b -gt $c -and $b -lt $a)) 
        Write-Host "$b is the middle number"
    
    if (($c -gt $a -and $c -lt $b) -or ($c -gt $b -and $c -lt $a)) 
        Write-Host "$c is the middle number"
    

【问题讨论】:

建议,在 ISE 或 VSCode 中调试您的代码。也许对它们进行排序并获得第二个。灵感来自(2,5,4 | Sort)[1] 您的代码 - 如发布的那样 - 不会做任何事情。 [皱眉] 您需要在第一个 if 之前添加一个 $Response = 1 以使代码不跳过整个块。 ///// 您的代码比较的是数字字符串,而不是数字。 [grin] 所以你需要在比较之前将输入转换为[int]。 ///// Kory Gill 的建议是一个更好的方法。 @Lee_Dailey 对三个值进行排序当然是获得中位数的一种更简单的方法,但是 OP 仍然需要确保这些值是数字,而不是字符串(这是 Read-Host 返回的内容),所以它们实际上是按数字顺序排序的。 @AnsgarWiechers - 啊!我的意思是说……我希望我可以编辑该评论。 [脸红] 【参考方案1】:

无需进行多次单独比较,只需对三个值进行排序并选择第二个元素即可立即为您提供中位数。但我怀疑实际上让你搞砸的结果是Read-Host 在你需要它们是数值时返回字符串。字符串的排序顺序(“1”

将输入的值转换为整数(如果您希望使用浮点数,则为双精度数)应该可以解决问题:

if ($response -eq 1) 
    [int]$a = Read-Host 'Enter a number'
    [int]$b = Read-Host 'Enter a second number'
    [int]$c = Read-Host 'Enter a third number'

    $n = ($a, $b, $c | Sort-Object)[1]

    Write-Host "$n is the median."

【讨论】:

【参考方案2】:

作为一个额外的解决方案,可以在你需要中间项目的任何数组上工作,你可以像这样解决它:

$arr = 1..50
($arr | Sort-Object)[[int](($arr.count -1) /2)]

如果您的数组采用不需要排序的格式,请忽略这部分。

编辑:显然您必须在第一步将数据插入到数组中。

最好的问候

【讨论】:

以上是关于在 PowerShell 中查找中间数的主要内容,如果未能解决你的问题,请参考以下文章

二分查找/折半查找

powershell 更新power shell中的帮助系统。第二个文件在Windows中显示帮助文件。第三个文件显示来自在线来源的帮助。

Help Desk Meet Power Shell

PowerShell ISE:调试从 power-shell 脚本调用的另一个 power-shell 脚本

如何使用Windows Power Shell

学习数据结构笔记(15) --- [二分查找算法(非递归)]