Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/64: Рейтинг темы: голосов - 64, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 12.05.2019
Сообщений: 10
1

Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекци

12.05.2019, 12:07. Просмотров 12580. Ответов 8
Метки нет (Все метки)


Здравствуйте, в Windows Forms (Visual studio 2017) выдаёт ошибку : "Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции", - помогите пожалуйста.


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public partial class Form1 : Form
    {
        Button[,] buttons;
        List<Image> images;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            int i;
            FillTheAraayOfButtons();
            images = new List<Image>();
            for (i = 1; i < 9; i++)
            {
                images.Add(Image.FromFile(@"D:\\Images"+i+".jpg"));
 
            }
            SetupGame();
        }
        void FillTheAraayOfButtons()
        {
            buttons = new Button[3, 3];
            buttons[0, 0] = button1;
            buttons[1, 0] = button2;
            buttons[2, 0] = button3;
            buttons[0, 1] = button4;
            buttons[1, 1] = button5;
            buttons[2, 1] = button6;
            buttons[0, 2] = button7;
            buttons[1, 2] = button8;
            buttons[2, 2] = button9;
        }
        void SetupGame()
        {
            Random rng = new Random();
            for (int x = 0; x<3; x++)
            {
                for (int  y= 0; y<3; y++)
                {
                    int RandomImageIndex = rng.Next(0, images.Count);
                    buttons[x, y].Image = images[RandomImageIndex];
                    images.RemoveAt(RandomImageIndex);
                }
            }
        }
    }


Ошибку выдаёт в этом моменте :
buttons[x, y].Image = images[RandomImageIndex];
0
Миниатюры
Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекци  
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.05.2019, 12:07
Ответы с готовыми решениями:

Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекци
Как исправить ошибку &quot;Индекс за пределами диапазона. Индекс должен быть положительным числом, а его...

Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекци
Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен...

Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать разме
Вот такая ошибка возникла - Как её исправить ?

Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать разме
int id = 0; id = groups; Ошибка. Индекс за пределами диапазона. Индекс должен быть...

8
30 / 28 / 9
Регистрация: 06.06.2014
Сообщений: 364
12.05.2019, 12:28 2
C#
1
int RandomImageIndex = rng.Next(0, images.Count - 1);
Попробуй так
0
Фрилансер
795 / 302 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
12.05.2019, 12:50 3
Лучший ответ Сообщение было отмечено Элд Хасп как решение

Решение

Цитата Сообщение от danil281 Посмотреть сообщение
Ошибку выдаёт в этом моменте :
buttons[x, y].Image = images[RandomImageIndex];
Потому что у Вас цикл 3х3, а картинок в images всего 8. Вот на последней итерации и возникает исключение

Добавлено через 2 минуты
Т.е. при загрузке картинок в список либо нужно цикл с 0 начинать, либо до i < 10
1
30 / 28 / 9
Регистрация: 06.06.2014
Сообщений: 364
12.05.2019, 13:48 4
asn31337, это тоже возможно, но мне кажется что картинок 9, но images.Count возвращает значение от 1 до 9, а индекс массива от 0 до 8
0
Фрилансер
795 / 302 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
12.05.2019, 14:02 5
Цитата Сообщение от craftersmine Посмотреть сообщение
это тоже возможно
Это не просто возможно, а так и есть!
Цитата Сообщение от craftersmine Посмотреть сообщение
мне кажется что картинок 9
Ну, если кажется, давайте посчитаем вместе... Цикл от 1 до i < 9... 1, 2, 3, 4, 5, 6, 7, 8... Сколько итераций получается?
Цитата Сообщение от craftersmine Посмотреть сообщение
но images.Count возвращает значение от 1 до 9, а индекс массива от 0 до 8
Вот тут как раз все правильно. Random.Next не затрагивает верхнюю границу. К примеру, Random.Next(0,9) никогда не вернет 9. Поэтому в рандоме и должно быть images.Count, а не images.Count - 1.
0
Модератор
8929 / 6249 / 1748
Регистрация: 21.04.2018
Сообщений: 18,583
Записей в блоге: 2
12.05.2019, 14:04 6
Цитата Сообщение от craftersmine Посмотреть сообщение
asn31337, это тоже возможно, но мне кажется что картинок 9, но images.Count возвращает значение от 1 до 9, а индекс массива от 0 до 8
Нет.
asn31337 - прав.
Картинки загружаются в цикле
C#
1
2
3
4
5
            for (i = 1; i < 9; i++)
            {
                images.Add(Image.FromFile(@"D:\\Images"+i+".jpg"));
 
            }
Цикл загружает только восемь картинок.

Индексы же массивов buttons и images между собой ни как не связаны. Индексы первого перебираются в циклах, индексы второго берутся случайно.
Но после выбора картинки, она из списка images удаляется. И когда циклы доходят до последней кнопки - список images уже пустой. И обращение к нему по индексу выдаёт ошибку.
1
30 / 28 / 9
Регистрация: 06.06.2014
Сообщений: 364
12.05.2019, 14:07 7
Ок, просто у меня была похожая ситуация где "-1" элемент исправил эту ошибку
0
Фрилансер
795 / 302 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
12.05.2019, 14:15 8
Цитата Сообщение от craftersmine Посмотреть сообщение
просто у меня была похожая ситуация где "-1" элемент исправил эту ошибку
Все верно. Если Вы обращаетесь к последнему элементу массива, то нужно указывать images.Count - 1.
Но в случае с рандомом ситуация немного иная. Т.к., как я говорил, верхняя граница не учитывается
0
Модератор
8929 / 6249 / 1748
Регистрация: 21.04.2018
Сообщений: 18,583
Записей в блоге: 2
12.05.2019, 14:28 9
Цитата Сообщение от craftersmine Посмотреть сообщение
Ок, просто у меня была похожая ситуация где "-1" элемент исправил эту ошибку
Random сам делает "-1".
Допустим, Random.Next(0,9) возвращает одно из чисел от 0 до 8 включительно. Число 9 не входит в диапазон возвращаемых.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2019, 14:28

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции
Подскажите, в чем ошибка? Выдает ошибку: Индекс за пределами диапазона. Индекс должен быть...

Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекци
Доброго времени суток. Есть проект, который взаимодействует с Excel. При нажатии на кнопку я...

Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекци
Есть код который создаёт матрицу в Гриде размером n на n Следущее действие должно считать сумму в...

Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать разме
Ребят, в общем вылазиет эта ошибка( Индекс за пределами диапазона. Индекс должен быть положительным...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.