добавление элемента в массив

Задание закрыто
Статус рабочей области:Поиск исполнителя
Стоимость:1 200 рублей
Срок выполнения:1 день
Варианты оплаты:По договоренности
Дата публикации:2023-10-19 23:43
Обновлено:2023-10-25 20:26
Был(а) на сайте:2024-04-29 23:57

добавление элемента в массив

 
Задача

Указать причину неожиданного поведения кода.(исправить ошибку в коде)
Описание нужного поведения:
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

Вячеслав Кочегаров

SMM , настройка и ведение таргетированной рекламы

Специализация: Программирование и IT
  • 100 руб1 день
Ошибка в коде заключается в том, что функция `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
Смогу сделать! Для обсуждения работы напишите в TG/vk.
Связь со мной
Vk: xeghfffff
TG: @AfkAutoPilotLifeMode
Причиной неожиданного поведения кода является присвоение переменной `$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"
```

Теперь код будет возвращать ожидаемый результат - единичку вместо двойки.
Ruslan Ziyatdinov
Специализация: Программирование и IT
  • 1 000 руб1 день
Готов качественно выполнить заказ, пожалуйста изучайте мой профиль.
Сергей Кузьмин
Специализация: Программирование и IT
  • 1 200 руб1 день
Готов помочь с данным проектом, уже есть вариант готового решения для вас, в случае чего можем модернизировать или изменить.
Денис
Специализация: Программирование и IT
  • 1 200 руб1 день
это происходит потому что функция Add() возвращает массив с его индексами. это можно легко увидеть если вывести весь массив, то там сначала будут идти цифры(индексы) от 0, а потом значения массива. что бы пофикисть можно добавить [Void] в таком случае оно будет игнорировать возвращаемое значение и только добавлять элементы -
function MyFoo {
$listQ = New-Object System.Collections.ArrayList
[Void]$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"

Оставлять заявки могут только авторизованные пользователи.