Указать причину неожиданного поведения кода.(исправить ошибку в коде)
Описание нужного поведения:
1) создаётся функция MyFoo создающая массив и наполняющая его одним элементом
(пересчёт кол-ва элементов внутри функции возвращает верное число: единичку)
2) скрипт в целом создаёт переменную $list и вызывает функцию MyFoo чтобы наполнить эту переменную
(пересчёт кол-ва элементов после вызова функции неожиданно возвращает двойку, хотя ожидалась единичка)
Откуда взялся второй элемент в массиве и как поправить скрипт, чтобы он работал должным образом?
function MyFoo {
$listQ = New-Object System.Collections.ArrayList
$listQ.Add("Значение 1q")
$count = $listQ.Count
Write-Host "Количество элементов в массиве listQ: $count"
return $listQ
}
$list = MyFoo
$count = $list.Count
Write-Host "Количество элементов в массиве list: $count" # здесь должна получиться единичка, равная кол-ву элементов добавленных в функции.
Оставлять заявки могут только авторизованные пользователи.
Общие комментарии:
Вот так выглядит вызов и вывод:
PS C:\Users\RooKee> function MyFoo {
$listQ = New-Object System.Collections.ArrayList
$listQ.Add("Значение 1q")
$count = $listQ.Count
Write-Host "Количество элементов в массиве listQ: $count"
return $listQ
}
$list = New-Object System.Collections.ArrayList
$list = MyFoo
$count = $list.Count
Write-Host "Количество элементов в массиве list: $count"
Количество элементов в массиве listQ: 1
Количество элементов в массиве list: 2
PS C:\Users\RooKee>
2023-10-19 23:46
проблема всё ещё не решена =(
2023-10-20 13:16
удивительно, но с заданием пока никто не справился =(
Ошибка в коде заключается в том, что функция `MyFoo` возвращает объект `ArrayList`, но в основном коде этот объект не сохраняется. Вместо этого, переменной `$list` присваивается значение `MyFoo`, что приводит к потере исходного объекта `ArrayList`. Из-за этого в последней строке кода, когда переменной `$count` присваивается количество элементов в `$list`, она равно 2 (поскольку объект `$list` теперь содержит исходный `ArrayList`, добавленный внутри функции `MyFoo`, и возвращенное значение функции).
Чтобы исправить эту ошибку, необходимо сохранить возвращаемое значение функции `MyFoo` в отдельной переменной, например, `$result`, и затем проверить количество элементов в `$result`, а не в `$list`. Исправленный код будет выглядеть следующим образом:
```powershell
function MyFoo {
$listQ = New-Object System.Collections.ArrayList
$listQ.Add("Значение 1q")
$count = $listQ.Count
Write-Host "Количество элементов в массиве listQ: $count"
return $listQ
}
$list = New-Object System.Collections.ArrayList
$result = MyFoo
$count = $result.Count
Write-Host "Количество элементов в массиве list: $count"
```
После внесения данной правки код будет возвращать кол-во элементов равное 1 в последнем `Write-Host`. Оплатить можно по номеру 89066683341
Проблема в вашем коде заключается в том, что вы создаете два разных объекта ArrayList. Один объект ArrayList находится внутри функции MyFoo, и второй объект ArrayList находится за пределами функции, когда вы присваиваете результат вызова функции переменной $list. Это приводит к тому, что у вас есть два разных ArrayList, и они не совпадают.
Вы должны вернуть ArrayList из функции и присвоить его переменной $list.
function MyFoo {
$listQ = New-Object System.Collections.ArrayList
$listQ.Add("Значение 1q")
$count = $listQ.Count
Write-Host "Количество элементов в массиве listQ: $count"
return $listQ
}
$list = MyFoo
$count = $list.Count
Write-Host "Количество элементов в массиве list: $count"
Оплата по номеру на 89194050500 ПСБ Связь со мной по ТГ @Takizawa_are
Причиной неожиданного поведения кода является присвоение переменной `$list` возвращаемое значение функции `MyFoo`, которое является ссылкой на тот же самый объект массива, который был создан внутри функции `MyFoo`. В результате, любые изменения, сделанные с массивом `$listQ` внутри функции `MyFoo`, также отразятся на массиве `$list` вне функции.
Чтобы исправить ошибку и получить ожидаемое поведение, необходимо возвращать копию массива `$listQ` из функции `MyFoo`. Это можно сделать, вызвав метод `.Clone()` для создания копии массива:
```powershell
function MyFoo {
$listQ = New-Object System.Collections.ArrayList
$listQ.Add("Значение 1q")
$count = $listQ.Count
Write-Host "Количество элементов в массиве listQ: $count"
return $listQ.Clone() # Возвращаем копию массива $listQ
}
$list = MyFoo
$count = $list.Count
Write-Host "Количество элементов в массиве list: $count"
```
Теперь код будет возвращать ожидаемый результат - единичку вместо двойки.
это происходит потому что функция Add() возвращает массив с его индексами. это можно легко увидеть если вывести весь массив, то там сначала будут идти цифры(индексы) от 0, а потом значения массива. что бы пофикисть можно добавить [Void] в таком случае оно будет игнорировать возвращаемое значение и только добавлять элементы -
function MyFoo {
$listQ = New-Object System.Collections.ArrayList
[Void]$listQ.Add("Значение 1q")
$count = $listQ.Count
Write-Host "Количество элементов в массиве listQ: $count"
return $listQ
}
добавление элемента в массив
Реклама
добавление элемента в массив
Указать причину неожиданного поведения кода.(исправить ошибку в коде)
Описание нужного поведения:
1) создаётся функция MyFoo создающая массив и наполняющая его одним элементом
(пересчёт кол-ва элементов внутри функции возвращает верное число: единичку)
2) скрипт в целом создаёт переменную $list и вызывает функцию MyFoo чтобы наполнить эту переменную
(пересчёт кол-ва элементов после вызова функции неожиданно возвращает двойку, хотя ожидалась единичка)
Откуда взялся второй элемент в массиве и как поправить скрипт, чтобы он работал должным образом?
function MyFoo {
$listQ = New-Object System.Collections.ArrayList
$listQ.Add("Значение 1q")
$count = $listQ.Count
Write-Host "Количество элементов в массиве listQ: $count"
return $listQ
}
$list = MyFoo
$count = $list.Count
Write-Host "Количество элементов в массиве list: $count" # здесь должна получиться единичка, равная кол-ву элементов добавленных в функции.
Общие комментарии:
Вот так выглядит вызов и вывод: PS C:\Users\RooKee> function MyFoo { $listQ = New-Object System.Collections.ArrayList $listQ.Add("Значение 1q") $count = $listQ.Count Write-Host "Количество элементов в массиве listQ: $count" return $listQ } $list = New-Object System.Collections.ArrayList $list = MyFoo $count = $list.Count Write-Host "Количество элементов в массиве list: $count" Количество элементов в массиве listQ: 1 Количество элементов в массиве list: 2 PS C:\Users\RooKee>
2023-10-19 23:46
проблема всё ещё не решена =(
2023-10-20 13:16
удивительно, но с заданием пока никто не справился =(
2023-10-25 20:28
Другие открытые задания:
Рекрутинг в соц. сетях (удаленно, без звонков)45 000 р.
Бюджет: 45 000 р. Наша компания ищет сотрудников в крупную компанию. Пишите в ТГ по нику ··· Условия работы: - Гибкий график работы, вы сами выбираете удобное время занятости, н…
отзывы на заказ500 р.
Бюджет: 500 р. Требуются люди для написания отзывов на картах, также есть вакансии на менеджера в группу по отзывам. Пишите в тг: DSTVER69 в сообщении укажите что вы с сайта фрила…
Чертежи в MS Visio20 000 р.
Бюджет: 20 000 р. Необходимо создать технические схемы в MS Visio: электротехническую, схему сети и, возможно, сетевую с элементами Cisco, план трубопровода и план помещения. В схема…
поиск заданий