Как добавить сумму чисел в массив - PullRequest
0 голосов
/ 15 октября 2019

Я новичок в изучении PowerShell и надеюсь, в конечном итоге, расширить свой опыт в других программах. В настоящее время я учусь на нем и в моём классе PowerShell помпцы стали моим врагом. В одном скрипте, который мы должны сделать, нам нужно создать скрипт, который будет добавлять числа, введенные в массив после нажатия кнопки, в этом случае эта кнопка будет иметь значение «0». Я пробовал разные сценарии, но продолжаю получать ошибки, любая помощь будет сильно оценена, и имейте в виду, что я новичок, поэтому чем проще ответ, тем лучше он мне поможет и, если возможно, объясните, почему мой код неправильный

Do {

    $input = Read-Host 'Enter variety of numbers and press 0 to add them together'

    if ($input -eq '0') {
        $sum = [int]$sum + ',' + [int]$sum
        Write-Host 'Sum of numbers entered' $sum
    }

}
while ($input -ne '0')

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Переменная $ input является переменной reservd powershell (, посмотрите здесь ), и вы не должны использовать ее в этом контексте.
Как и в упомянутых комментариях, я бы также добавил в ваш файл elseЦикл и сохранить ввод в массив.

[System.Int32[]]$UserInputs = @() #INT Array
do {

    [System.Int32]$UserInput = Read-Host -Prompt 'Enter variety of numbers and press 0 to add them together'

    if ($UserInput -eq 0)
    {
        Out-Host -InputObject ('Sum of numbers entered ' + ($UserInputs | Measure-Object -Sum).Sum) #Return the sum
    }
    else
    {
        $UserInputs += $UserInput #Add user input to array
    }
}
while ($UserInput -ne 0)
1 голос
/ 15 октября 2019

Во-первых, $input - это автоматическая переменная , поэтому использование ее для пользовательского ввода может привести к неожиданному поведению.

Учитывая, что Powershellish использует встроеннуюв командлетах, таких как Measure-Object, которые могут суммировать вещи. Примерно так:

$i = Read-Host 'Enter variety of numbers, separated by space. Press <Enter> to add them together'
Write-host "The grand total is" ($i -split ' '  | measure-object -sum).sum

Ввод читается как строка в $i. Поскольку сама строка немного сложна, оператор -split используется для разбиения ее на несколько вещей. Пробел ' ' используется в качестве разделителя для разделения. Результатом является массив объектов, который передается по каналу Measure-Object. Он достаточно умен, чтобы понять, что вещи на самом деле целые, поэтому суммирование имеет смысл. Поскольку командлет возвращает несколько цифр о своем вводе, .sum используется для доступа только к сумме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...