|
Не удаляются элементы массива | ☑ | ||
---|---|---|---|---|
0
Нач программист
16.08.16
✎
08:56
|
Процедура Задача_11_156_а(Команда)
Строка=""; Строка1=""; МассивН=Новый Массив(20); Для Счетчик=0 По 19 Цикл ГСЧ=Новый ГенераторСлучайныхЧисел(Счетчик); СлучайноеЧисло=ГСЧ.СлучайноеЧисло(0,20); Если СлучайноеЧисло%2=0 Тогда А=СлучайноеЧисло*1; ИначеЕсли СлучайноеЧисло%2=1 Тогда А=случайноеЧисло*(-1); КонецЕсли; МассивН[Счетчик]=А; Строка=Строка+А+" "; КонецЦикла; Сообщить("МассивН: "+Строка); Для Счетчик=0 По МассивН.Количество() Цикл Если МассивН.Получить(Счетчик)<0 Тогда МассивН.Удалить(Счетчик); КонецЕсли; КонецЦикла; Сообщить("Количество массива после удаления: "+МассивН.Количество()); КонецПроцедуры Выдает ошибку: {Форма.Форма.Форма(71)}: Ошибка при вызове метода контекста (Получить) Если МассивН.Получить(Счетчик)<0 Тогда по причине: Значение индекса выходит за границы диапазона |
|||
1
DDwe
16.08.16
✎
08:58
|
Ну, так читайте соответствующую литературу раз начинающий. Или учитесь поиском пользоваться, короче трудитесь, труд из обезьяны человека создал, а вы обратно стремитесь.
|
|||
2
Горогуля
16.08.16
✎
09:00
|
(0) сто раз у меня так было
|
|||
3
Mauser
16.08.16
✎
09:00
|
(0) чорт побери, действительно ошибка!
|
|||
4
vicof
16.08.16
✎
09:00
|
Нач - это начинающий? начитанный? начальник?
|
|||
5
Лохматые Уши
16.08.16
✎
09:02
|
У тебя в переменной Счетчик значение 20, а должно быть 19, т.к. с 0 начинаешь.
|
|||
6
Горогуля
16.08.16
✎
09:02
|
(4) начаток
|
|||
7
Mauser
16.08.16
✎
09:02
|
(4) Точки нет - значит не сокращение.
|
|||
8
DDwe
16.08.16
✎
09:03
|
(5) Вот мало того, что ты ему рыбу дал, так еще и тухлую подсунул. Лучше бы ничего не говорил.
|
|||
9
Eternium
16.08.16
✎
09:06
|
(0) Включи остановку по ошибке и посмотри, чему у тебя равны МассивН.Количество() и Счетчик перед тем, как крашнуться.
|
|||
10
Горогуля
16.08.16
✎
09:10
|
без толку. тут надо через назад работать или как с коллекцией
|
|||
11
DDwe
16.08.16
✎
09:10
|
(10) Бота тестируешь?
|
|||
12
Горогуля
16.08.16
✎
09:12
|
таа. пота. тестируема.
|
|||
13
DDwe
16.08.16
✎
09:15
|
Всё, спугнули ТС.
|
|||
14
Лохматые Уши
16.08.16
✎
09:21
|
(8) Отчего ж тухлая? Программист запулял в массив 20 значений, а потом пытается удалить 21 значение.
|
|||
15
DDwe
16.08.16
✎
09:23
|
(14) То, что ты ему сунул одноразовое решение, в следующий раз, когда массив у него будет 10 элементов, он по твоей наводке будет 19 подставлять.
|
|||
16
Генератор
16.08.16
✎
09:38
|
Там еще и сдвиг элементов будет, удалит он 10-й элемент например, и 11-й станет 10-м, следующий элемент будет пропущен, и количество будет меняться в процессе удалений. Надо с конца обходить элементы, циклом пока
|
|||
17
Mauser
16.08.16
✎
09:38
|
(14) От того, что он удаляет из массива, который обходит. И что у него в счетчике - ведомо только Аллаху, да святится имя его.
|
|||
18
singlych
16.08.16
✎
09:43
|
(14) он до 21-го может и не дойти
|
|||
19
Лохматые Уши
16.08.16
✎
09:46
|
Методика удаления неверная, с этим я согласен.
|
|||
20
_stay true_
16.08.16
✎
09:54
|
ТС, дай хоть условие задачи, что нужно реализовать в твоём коде. Мы к тебе в отладчики работать не нанимались
|
|||
21
Mauser
16.08.16
✎
09:57
|
(20) А ты при регистрации оферту внимательно читал?
|
|||
22
Нач программист
16.08.16
✎
10:02
|
Удалить из массива:
а) все отрицательные элементы; |
|||
23
Горогуля
16.08.16
✎
10:11
|
(22) благословляю
|
|||
24
Mauser
16.08.16
✎
10:14
|
(23) Судя по всему там есть буква "б"
|
|||
25
Горогуля
16.08.16
✎
10:15
|
(24) есть такая буква! крутите барабан
|
|||
26
DDwe
16.08.16
✎
10:16
|
(22) Сказал "а", говори другие буквы алфавита.
|
|||
27
_stay true_
16.08.16
✎
10:19
|
(22) Отрицательные элементы это типа -1,-2,-10,-44?
Если да, то проще всего будет Перебрать весь массив в цикле, можешь даже завести счётчик(только помни, что первый элемент массива имеет индекс 0, следовательно, до тела цикла Счетчик=-1),увеличивать счётчик с каждой итерацией цикла, сравнить значение каждого элемента с нулём, и если тек.элемент меньше нуля - Массив.Удалить(Счетчик) |
|||
28
_stay true_
16.08.16
✎
10:23
|
А вообще:
Для Счетчик=0 По МассивН.Количество()-1 Цикл Если МассивН.Получить(Счетчик)<0 Тогда МассивН.Удалить(Счетчик); КонецЕсли; Если хочешь так, хотя бы сделай так Если МассивН[Счетчик]<0 Тогда МассивН.Удалить[Счетчик]; КонецЕсли; |
|||
29
DDwe
16.08.16
✎
10:30
|
(28) Что ж вы трудные такие, не будет это работать, зачем бред советуешь, спец диванный.
|
|||
30
Mauser
16.08.16
✎
10:31
|
(29) Спокойно. У них тоже своя лига. Пока неназываемая
|
|||
31
DDwe
16.08.16
✎
10:32
|
(30) +100500 ))) Лига Неназываемых.
|
|||
32
_stay true_
16.08.16
✎
10:35
|
(29) (31) Дык, посоветуйте что-то работающее, умники и умницы.
|
|||
33
Горогуля
16.08.16
✎
10:36
|
(32) можно я больше не буду?
|
|||
34
DDwe
16.08.16
✎
10:37
|
(32) Так нахрена ты неработающий код с грубейшими ошибками сюда выкладываешь?
|
|||
35
singlych
16.08.16
✎
10:38
|
(32) уже посоветовали в (16)
|
|||
36
_stay true_
16.08.16
✎
10:38
|
(34) Люблю вас, милаффки:)
|
|||
37
DDwe
16.08.16
✎
10:40
|
(36) Еще одно. )))
|
|||
38
Горогуля
16.08.16
✎
11:05
|
||||
39
aka AMIGO
16.08.16
✎
11:18
|
ТС"у советовали обход массива с конца к началу?
Если нет - я первый... еси чё.. Ну это типа так, прверять не буду, уж как-нибудь сами: Для -МассивН.Количество()+1 По Счетчик = 0 Цикл ... ЗЫ. Стандартная ошибка, её сообщение полностью подсказывает решение.. |
|||
40
aka AMIGO
16.08.16
✎
11:19
|
+39 не забыть только поменять знак у "Счетчик" при получении элемента массива.
С минуса на плюс :) |
|||
41
Timon1405
16.08.16
✎
11:20
|
(39)
Для Сч = -м.ВГраница() по 0 Цикл Если М[-Сч] <0 тогда м.Удалить(-Сч); КонецЕсли; КонецЦикла |
|||
42
aka AMIGO
16.08.16
✎
11:20
|
(41) Во! поэлегантнее решение нашлось :)
|
|||
43
Нач программист
31.08.16
✎
13:51
|
(41) Спасибо!
//Удалить из массива: //а) все отрицательные элементы; //б) все элементы, большие данного числа n; //в) все элементы, начиная с n1-го по n2-й (n1 n2). МассивЧиселВСтроку=""; МассивЧисел=Новый Массив(20); ГСЧ=Новый ГенераторСлучайныхЧисел(20); Для Счетчик=0 По 19 Цикл СлучайноеЧисло=ГСЧ.СлучайноеЧисло(0,40); СлучайноеЧислоДляМинуса=ГСЧ.СлучайноеЧисло(0,1); Если СлучайноеЧислоДляМинуса=0 Тогда СлучайноеЧисло=СлучайноеЧисло*1; ИначеЕсли СлучайноеЧислоДляМинуса%2=1 Тогда СлучайноеЧисло=случайноеЧисло*(-1); КонецЕсли; МассивЧисел[Счетчик]=СлучайноеЧисло; МассивЧиселВСтроку=МассивЧиселВСтроку+МассивЧисел[Счетчик]+" "; КонецЦикла; Сообщить("Массив Чисел: "+МассивЧиселВСтроку); Для Счетчик=-МассивЧисел.ВГраница() По 0 Цикл Если н1<=-Счетчик И -Счетчик<=н2 И н1<=н2 Тогда МассивЧисел.Удалить(-Счетчик); КонецЕсли; КонецЦикла; Сообщить("Количество массива после удаления: "+МассивЧисел.Количество()); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |