Создал список значений, генератором случайных чисел пытаюсь получить рандомное число. ГСЧ работает отлично. Но вот проблема:
СПЗ = Новый СписокЗначений;
СПЗ.Добавить(1,Элементы.Декорация2); //индекс 0
СПЗ.Добавить(2,Элементы.Декорация3);
СПЗ.Добавить(3,Элементы.Декорация4);
СПЗ.Добавить(4,Элементы.Декорация5);
СПЗ.Добавить(5,Элементы.Декорация6);
СПЗ.Добавить(6,Элементы.Декорация7);
СПЗ.Добавить(7,Элементы.Декорация8);
СПЗ.Добавить(8,Элементы.Декорация9);
СПЗ.Добавить(9,Элементы.Декорация10);
СПЗ.Добавить(10,Элементы.Декорация11);
СПЗ.Добавить(11, 11);
СПЗ.Добавить(12, 12);
ГСЧ = Новый ГенераторСлучайныхЧисел();
СЧ = ГСЧ.СлучайноеЧисло(1,СПЗ.Количество());
Сообщить(СЧ);
Массив = Новый Массив(10);
Для ч = 1 По 10 Цикл
Массив[ч] = СПЗ.Получить(СЧ);
КонецЦикла;
СПЗ.Удалить(СЧ);
ПоказатьПрикрепленные файлы:
По теме из базы знаний
- Ошибки в ЦУП и способы решения
- Ошибка 2-НДФЛ ЗУП (3.0.25.150) {ОбщийМодуль.ЗарплатаКадры.Модуль(5279)}: Индекс находится за границами массива
- Отбор/фильтр в отчетах/СКД/обработках 1C: БП, УТ, ERP, Кронос: WMS по файлу Excel, текстовому файлу или списку текстовых строк (номер документа, артикул, ИНН, QR-код, штрих-код, наименование)
- О цикле обратном замолвите слово...
- Как готовить и есть массивы
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(6)
та же ошибка поправил код
Индекс находится за границами массива
{ОбщаяФорма.НаСколькоДолгийМарафон.Форма(23)}: Массив[ч] = СПЗ.Получить(СЧ);
та же ошибка поправил код
СПЗ = Новый СписокЗначений;
СПЗ.Добавить(1,Элементы.Декорация2); //индекс 0
СПЗ.Добавить(2,Элементы.Декорация3);
СПЗ.Добавить(3,Элементы.Декорация4);
СПЗ.Добавить(4,Элементы.Декорация5);
СПЗ.Добавить(5,Элементы.Декорация6);
СПЗ.Добавить(6,Элементы.Декорация7);
СПЗ.Добавить(7,Элементы.Декорация8);
СПЗ.Добавить(8,Элементы.Декорация9);
СПЗ.Добавить(9,Элементы.Декорация10);
СПЗ.Добавить(10,Элементы.Декорация11);
ГСЧ = Новый ГенераторСлучайныхЧисел();
СЧ = ГСЧ.СлучайноеЧисло(1,СПЗ.Количество()-1);
Массив = Новый Массив;
Для ч = 0 По 11 Цикл
Массив[ч] = СПЗ.Получить(СЧ);
КонецЦикла;
СПЗ.Удалить(СЧ);
ПоказатьИндекс находится за границами массива
{ОбщаяФорма.НаСколькоДолгийМарафон.Форма(23)}: Массив[ч] = СПЗ.Получить(СЧ);
(9)
Если я правильно понял ваши хотелки, то код должен быть примерно таким:
я их пытался перемешивать, тем самым каждый раз меняя порядок картинок на случайный.
Как я посмотрю, вы совсем не пытаетесь понять - как работает программа?
Если я правильно понял ваши хотелки, то код должен быть примерно таким:
ГСЧ = Новый ГенераторСлучайныхЧисел();
Массив = Новый Массив(10);
Для ч = 0 По 9 Цикл
СЧ = ГСЧ.СлучайноеЧисло(0,СПЗ.Количество()-1);
Сообщить(СЧ);
Массив[ч] = СПЗ.Получить(СЧ);
СПЗ.Удалить(СЧ);
КонецЦикла;
(11)
Во-вторых, вы неправильно строили алгоритм, заполняя массив одним и тем же значением из списка - вот ваша главная ошибка.
я ж не знал что везде нужен 0...
Во-первых, не везде: список значений вы заполняете чем угодно, хоть единицами, хоть тысячами. Пожалуй, более правильный код будет таким:
ГСЧ = Новый ГенераторСлучайныхЧисел();
Массив = Новый Массив(10);
Для ч = 1 По 10 Цикл
СЧ = ГСЧ.СлучайноеЧисло(1,СПЗ.Количество());
Сообщить(СЧ);
Массив[ч-1] = СПЗ.Получить(СЧ);
СПЗ.Удалить(СЧ);
КонецЦикла;
Во-вторых, вы неправильно строили алгоритм, заполняя массив одним и тем же значением из списка - вот ваша главная ошибка.
(16) 1,СПЗ.Количество()
Да знаю, я сам бываю невнимателен(
Исправил, ошибка та же, может с 2 начать отсчёт ?
{ОбщаяФорма.НаСколькоДолгийМарафон.Форма(22)}: Ошибка при вызове метода контекста (Получить)
Массив[ч-1] = СПЗ.Получить(СЧ);
по причине:
Значение индекса выходит за границы диапазона
Значение индекса выходит за границы диапазона
Да знаю, я сам бываю невнимателен(
Исправил, ошибка та же, может с 2 начать отсчёт ?
СЧ = ГСЧ.СлучайноеЧисло(1,СПЗ.Количество());
Массив[ч-1] = СПЗ.Получить(СЧ);
{ОбщаяФорма.НаСколькоДолгийМарафон.Форма(22)}: Ошибка при вызове метода контекста (Получить)
Массив[ч-1] = СПЗ.Получить(СЧ);
по причине:
Значение индекса выходит за границы диапазона
Значение индекса выходит за границы диапазона
(20) я исправил, оно не пустым было, а конец в списке случайных чисел, убрал я из кода:
СПЗ.Удалить(СЧ);
ошибка осталась, не в нём было дело. а ошибка опять трындит про эту строку
Значение индекса выходит за границы диапазона
{ОбщаяФорма.НаСколькоДолгийМарафон.Форма(25)}: Массив[ч-1] = СПЗ.Получить(СЧ);
по причине:
Значение индекса выходит за границы диапазона
СПЗ.Удалить(СЧ);
ошибка осталась, не в нём было дело. а ошибка опять трындит про эту строку
Массив[ч-1] = СПЗ.Получить(СЧ);
Значение индекса выходит за границы диапазона
{ОбщаяФорма.НаСколькоДолгийМарафон.Форма(25)}: Массив[ч-1] = СПЗ.Получить(СЧ);
по причине:
Значение индекса выходит за границы диапазона
(21)
(19)
Вот тут у вас собака явно порылась.
оно не пустым было, а конец в списке случайных чисел
Я не знаю, что это за "конец", но получить надо число: просто потому что индекс - это число.
убрал я из кода:
СПЗ.Удалить(СЧ);
Оно там было не случайно - теперь у вас в массиве наверняка окажутся дубли картинок.
СПЗ.Удалить(СЧ);
Значение индекса выходит за границы диапазона
Неудивительно, только сейчас обратил внимание:
(19)
8 чисел дал отличных от нуля: 9,4,8,3,1,2,4,4.
Какого хрена у вас в конце этой последовательности делает четверка??? Ведь верхняя граница диапазона СЧ устанавливается по количеству оставшихся элементов в списке значений - их на этот момент будет только 3!
Вот тут у вас собака явно порылась.
(20) Код переписал полностью, ошибку про индекс исправил, гсч работает. Но картинки не перемешиваются, в этом то и проблема, которую я не знаю как исправить.
СПЗ = Новый СписокЗначений;
СПЗ.Добавить(1,Элементы.Декорация2); //индекс 0
СПЗ.Добавить(2,Элементы.Декорация3);
СПЗ.Добавить(3,Элементы.Декорация4);
СПЗ.Добавить(4,Элементы.Декорация5);
СПЗ.Добавить(5,Элементы.Декорация6);
СПЗ.Добавить(6,Элементы.Декорация7);
СПЗ.Добавить(7,Элементы.Декорация8);
СПЗ.Добавить(8,Элементы.Декорация9);
СПЗ.Добавить(9,Элементы.Декорация10);
СПЗ.Добавить(10,Элементы.Декорация11);
ГСЧ = Новый ГенераторСлучайныхЧисел();
Массив = Новый Массив(10);
Для ч = 1 По 10 Цикл
СЧ = ГСЧ.СлучайноеЧисло(1,СПЗ.Количество()-2);
Сообщить(СЧ);
Массив[ч-1] = СПЗ.Получить(СЧ);
КонецЦикла;
Показать // Исходный массив картинок
МассивКартинок = Новый Массив (10);
МассивКартинок[0] = Элементы.Декорация2;
МассивКартинок[1] = Элементы.Декорация3;
МассивКартинок[2] = Элементы.Декорация4;
МассивКартинок[3] = Элементы.Декорация5;
МассивКартинок[4] = Элементы.Декорация6;
МассивКартинок[5] = Элементы.Декорация7;
МассивКартинок[6] = Элементы.Декорация8;
МассивКартинок[7] = Элементы.Декорация9;
МассивКартинок[8] = Элементы.Декорация10;
МассивКартинок[9] = Элементы.Декорация11;
// Перемешивание осуществляем с помощью списка значений,
// где Значение - картинка, а Представление - случайное число.
ГенераторЧисел = Новый ГенераторСлучайныхЧисел();
СписокКартинок = Новый СписокЗначений;
СписокКартинок.ЗагрузитьЗначения(МассивКартинок)
Для каждого ЭлементСписка Из СписокКартинок Цикл
СлучайноеЧисло = ГенераторЧисел.СлучайноеЧисло(, 99999);
ЭлементСписка.Представление = Формат(СлучайноеЧисло, "ЧЦ=5; ЧН=; ЧВН=; ЧГ=");
КонецЦикла;
// Отсортировав случайные числа по порядку
// мы получим исходный массив картинок в случайном порядке.
СписокКартинок.СортироватьПоПредставлению();
МассивКартинок = СписокКартинок.ВыгрузитьЗначения();
ПоказатьПробую другой код: не работает...
(27)
Да еще лепите лишние массивы и прочую хрень.
Проверяйте:
Пробую другой код: не работает...
Ффух! Даже я, закоренелый семерочник, уже разобрался (вроде бы), а вы до сих пор путаете представление и значение списка значений!
Да еще лепите лишние массивы и прочую хрень.
Проверяйте:
ГСЧ = Новый ГенераторСлучайныхЧисел();
СПЗ = Новый СписокЗначений;
СПЗ.Добавить(Элементы.Декорация2,Строка(ГСЧ.СлучайноеЧисло(1000,9999)));
СПЗ.Добавить(Элементы.Декорация3,Строка(ГСЧ.СлучайноеЧисло(1000,9999)));
СПЗ.Добавить(Элементы.Декорация4),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация5),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация6),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация7),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация8),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация9),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация10),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация11),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.СортироватьПоПредставлению();
Массив = СПЗ.ВыгрузитьЗначения();
Показать
(28)
А картинки на форме перемешиваются ?
ГСЧ = Новый ГенераторСлучайныхЧисел();
СПЗ = Новый СписокЗначений;
СПЗ.Добавить(Элементы.Декорация2,Строка(ГСЧ.СлучайноеЧисло(1000,9999)));
СПЗ.Добавить(Элементы.Декорация3,Строка(ГСЧ.СлучайноеЧисло(1000,9999)));
СПЗ.Добавить(Элементы.Декорация4),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация5),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация6),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация7),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация8),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация9),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация10),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация11),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.СортироватьПоПредставлению();
Массив = СПЗ.ВыгрузитьЗначения();
ПоказатьСПЗ = Новый СписокЗначений;
СПЗ.Добавить(Элементы.Декорация2,Строка(ГСЧ.СлучайноеЧисло(1000,9999)));
СПЗ.Добавить(Элементы.Декорация3,Строка(ГСЧ.СлучайноеЧисло(1000,9999)));
СПЗ.Добавить(Элементы.Декорация4),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация5),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация6),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация7),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация8),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация9),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация10),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.Добавить(Элементы.Декорация11),Строка(ГСЧ.СлучайноеЧисло(1000,9999));
СПЗ.СортироватьПоПредставлению();
Массив = СПЗ.ВыгрузитьЗначения();
А картинки на форме перемешиваются ?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот