Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
9 / 9 / 4
Регистрация: 02.12.2010
Сообщений: 66

Выход индекса за рамки массива

18.02.2013, 22:28. Показов 1327. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос следующий : После нажатия на форме кнопки несколько раз возникает ошибка выхода индекса за рамки массива в методе end_combination(); как исправить это? Нужно перезапустить все но не закрывая форму. Заранее благодарю!


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private void Form1_Load(object sender, EventArgs e)
        {
 
            end_combination();
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            Form1_Load(sender, e);
 
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.02.2013, 22:28
Ответы с готовыми решениями:

Выход за рамки индекса при шифровании/дешифровании строки
Доброго времени суток! Создал шифратор/дешифратор методами ROT и атбаш. Во время проверки столкнулся с некоторыми проблемами: ...

UserControl выход за рамки родителя
Подскажите, как сделать так, чтобы контрол мог выходить за рамки родителя. Что-то наподобие как Tooltip.

Выход за рамки массива
Всем добра! Допустим есть массив: int a={0,0,0,0,0,0,0,0} То почему если мы выведем например 12 элемент a,у нас не будет...

11
40 / 40 / 15
Регистрация: 28.05.2011
Сообщений: 257
Записей в блоге: 1
18.02.2013, 22:33
выложите код end_combination()
0
9 / 9 / 4
Регистрация: 02.12.2010
Сообщений: 66
18.02.2013, 22:37  [ТС]
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
 public void search_combination(int colour, int[] count_combination, string[] card_gamer2_string, string[] up)//Знаходження комбінацій за запис
        {
 
 
            int i = 0, j = 0;
            int count = 0;
            bool test = false;
            if (colour >= 3)
            {
                for (i = 0; i < 8; i++)
                {
                    if (card_gamer2_string[i] != null)
                    {
                        count = 0;
                        test = true;
                        count_combination[j]++;
                        up[j] = card_gamer2_string[i];
                    }
                    else
                    {
                        if (test == false) { }
                        else
                        {
                            count++;
                            if (count == 1) { j++; }
                        }
                    }
                }
            }
 
        }
 
        private void end_combination() {
 
            int i =0 ;
            for (i = 0; i < 4; i++)
            {
                switch (i)
                {
 
                    case 0:
                        search_combination(pika, pika_count_gamer2_int, pika_gamer2_string, up_pika_gamer2_string);
                        break;
                    case 1:
                        search_combination(cherva, cherva_count_gamer2_int, cherva_gamer2_string, up_cherva_gamer2_string);
                        break;
                    case 2:
                        search_combination(buba, buba_count_gamer2_int, buba_gamer2_string, up_buba_gamer2_string);
                        break;
                    case 3:
                        search_combination(xresta, xresta_count_gamer2_int, xresta_gamer2_string, up_xresta_gamer2_string);
                        break;
 
                }
            }
 
 
            int count_pika = 0; //Кількість комбінацій
            int count_cherva = 0; //Кількість комбінацій
            int count_buba = 0; //Кількість комбінацій
            int count_xresta = 0; //Кількість комбінацій
            
            int[] adress_pika_up = new int[3];//Адреса для визначення вищої карти комбінації
            int[] adress_cherva_up = new int[3];//Адреса для визначення вищої карти комбінації
            int[] adress_buba_up = new int[3];//Адреса для визначення вищої карти комбінації
            int[] adress_xresta_up = new int[3];//Адреса для визначення вищої карти комбінації
 
            int a =-1, b=-1, c=-1, d=-1;
            for (i = 0; i < 10; i++) {//Запис Кількості комбінацій та їхніх адрес
                if (pika_count_gamer2_int[i] >= 3) { a++; count_pika++; adress_pika_up[a] = i; }       
                if (cherva_count_gamer2_int[i] >= 3) { b++; count_cherva++; adress_cherva_up[b] = i; } 
                if (buba_count_gamer2_int[i] >= 3) { c++; count_buba++; adress_buba_up[c] = i; }       
                if (xresta_count_gamer2_int[i] >= 3) { d++; count_xresta++; adress_xresta_up[d] = i; } 
            }
 
           string[] end_up_combination = new string[8];   //Вища та розмір комбінації
           int ptr = 0;
           
            if (count_pika != 0)
            {
                for (i = 0; i < count_pika; i++)
                {
 
                    end_up_combination[ptr] = up_pika_gamer2_string[adress_pika_up[i]];
                    end_up_combination[ptr+4] = pika_count_gamer2_int[adress_pika_up[i]].ToString();
                    ptr++;
 
                }
            }
 
            
            if (count_cherva != 0)
            {
                for (i = 0; i < count_cherva; i++)
                {
 
                    end_up_combination[ptr] = up_cherva_gamer2_string[adress_cherva_up[i]];
                    end_up_combination[ptr + 4] = cherva_count_gamer2_int[adress_cherva_up[i]].ToString();
                    ptr++;
 
 
                }
            }
 
 
            if (count_buba != 0)
            {
                for (i = 0; i < count_buba; i++)
                {
 
                    end_up_combination[ptr] = up_buba_gamer2_string[adress_buba_up[i]];
                    end_up_combination[ptr + 4] = buba_count_gamer2_int[adress_buba_up[i]].ToString();
                    ptr++;
 
                }
            }
 
 
            if (count_xresta != 0)
            {
                for (i = 0; i < count_xresta; i++)
                {
 
                    end_up_combination[ptr] = up_xresta_gamer2_string[adress_xresta_up[i]];
                    end_up_combination[ptr + 4] = xresta_count_gamer2_int[adress_xresta_up[i]].ToString();
                    ptr++;
 
                }
            }
 
            textBox1.Text = ConvertStringArrayToString(end_up_combination);
           
        }
0
9 / 9 / 4
Регистрация: 02.12.2010
Сообщений: 66
18.02.2013, 22:41  [ТС]
скрин
Миниатюры
Выход индекса за рамки массива  
0
40 / 40 / 15
Регистрация: 28.05.2011
Сообщений: 257
Записей в блоге: 1
18.02.2013, 22:41
buba_count_gamer2_int - где объявление?
0
9 / 9 / 4
Регистрация: 02.12.2010
Сообщений: 66
18.02.2013, 22:49  [ТС]
сразу после запуска все работает, но после обновления кнопкой значения переменной ptr остаются(я так думаю) и потому выходит за рамки...пробовал в конце метода присваивать 0, но ничего не помогло


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
public partial class Form1 : Form
    {
 
       int[] pika_count_gamer2_int = new int[10];
 
public void search_combination(int colour, int[] count_combination, string[] card_gamer2_string, string[] up){}
 
public void end_combination() {}
 
 private void Form1_Load(object sender, EventArgs e)
        {
 
            koloda();
            count_colour();
            end_combination();
            //button1_Click(sender, e);
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            Form1_Load(sender, e);
           // this.Refresh();
       
        
        }
 
}
0
40 / 40 / 15
Регистрация: 28.05.2011
Сообщений: 257
Записей в блоге: 1
18.02.2013, 22:56
вот поставьте точку останова на строку
C#
1
end_up_combination[ptr + 4] = buba_count_gamer2_int[adress_buba_up[i]].ToString();
и дождитесь падения, а после проверьте значения индексов - будет выяснена причина падения и останется понять, почему так происходит, то есть нужно будет проследить за данным индексом
0
9 / 9 / 4
Регистрация: 02.12.2010
Сообщений: 66
18.02.2013, 23:04  [ТС]
но программа из начала запускается хорошо ошибка выходит только после второго вызова метода...

Добавлено через 1 минуту
то есть button1_Click(object sender, EventArgs e)
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
19.02.2013, 06:24
OlegLvovskyj,
C#
1
string[] end_up_combination = new string[8];
Почему именно 8? Где гарантия того, что у вас сумма всех переменных с префиксом count_ не превысит 4?
0
9 / 9 / 4
Регистрация: 02.12.2010
Сообщений: 66
19.02.2013, 17:16  [ТС]
дело в том что выход за пределы невозможен при первом вызове...(сумма всех count <= 3)

Добавлено через 17 минут
kodv, дело в том что выход за пределы невозможен при первом вызове...(сумма всех count <= 3) первый вызов я имею в виду F5 запуск программы... а когда второй раз вызываю уже кнопкой (button) сумма всех count большая 4.. поэтому я спрашиваю почему переменные не берут начального значения инициализации?
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
19.02.2013, 19:40
OlegLvovskyj, Какие переменные? Которые начинаются с префикса count_? Я просто не знаю, какие у вас значения содержатся в группе массивов с постфиксом _count_gamer2_int. Поэтому есть подозрение, что со второго раза хотя 5 из 40 значений будут больше или равно двум, что приведет к исключению. В любом случае, завязывать все, что можно, на константы - это не есть хорошо. Сделайте длину массива end_up_combination зависимой от группы переменных count_, тогда исключения избежите точно. И проверьте в дебаггере, сколько раз у вас эти переменные инкрементируются в цикле.
1
9 / 9 / 4
Регистрация: 02.12.2010
Сообщений: 66
19.02.2013, 23:25  [ТС]
решил... проблема была у глобальных переменных которые не обновлялись а перезаписывались....переместил все объявления в метод и все заработало...всем спасибо кто помогал...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.02.2013, 23:25
Помогаю со студенческими работами здесь

Выход за рамки массива
Здравствуйте. Подскажите, пожалуйста, как такое, вообще может быть. Написал программу. #include &lt;iostream&gt; using...

Выход индекса за границу массива
При запуске получаю сообщение о том, что индекс выходит за границу массива в строке. Прошу указать на ошибку. string data =...

Что ему не нравится? (выход индекса за приделы массива)
Имеется метод ,который обрезает изображение(массив 1 и 0) по размеру периметру* символа,данные на входе указанны в комментариях public...

Шифрование файла перемешанным алфавитом, выход индекса за границы массива
Добрый день, форумчане! Столкнулся с проблемой выхода за границы массива, прошу помощи. Дано задание: Текстовый файл зашифровать с...

Выход за рамки body
Доброго времени суток! Скажите, пожалуйста, как избавиться от такого недоразумения? А также как рекомендации: &quot;как...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru