Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 05.11.2016
Сообщений: 46

Почему код иногда выдаёт переполнение массива?

19.11.2016, 21:11. Показов 874. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Товарищи, почему выдаёт иногда выдаёт переполнение массива?
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication24
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rnd = new Random();
            int[] otr = new int[20];
            int[] nol = new int[20];
            int[] chet = new int[20];
            int[] nchet = new int[20];
            int[,] q = new int[4, 4];
            int i = 0;
            int o = 0;
            int n = 0;
            for (int w = 0; w < 4; w++)
            {
                for (int j = 0; j < 4; j++)
                {
                    int p = rnd.Next(-20, 20);
                    q[w, j] = p;
                    if (q[w, j] < 0)//отрицательные
                    {
                        otr[o] = q[w, j];
                        i++;
                        Console.WriteLine("Отрицательные {0}", q[w, j]);
                    }
                    if (q[w, j] == 0)//нули
                    {
                        nol[n] = q[w, j];
                        i++;
                        Console.WriteLine("Нули {0}", q[w, j]);
                    }
                    if (q[w, j] % 2 == 0) //чётные
                    {
                        chet[i] = q[w, j];
                        i++;
                        Console.WriteLine("Чётные {0}", q[w, j]);
                    }
                    else //нечётные
                    {
                        nchet[i] = q[w, j];
                        i++;
                        Console.WriteLine("Нечётные {0}", q[w, j]);
                    }
                }
            }
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.11.2016, 21:11
Ответы с готовыми решениями:

Почему код выдаёт object NodeList
Есть скрипт который берёт ссылки на странице и сохраняет в текстовый файл, 2 дня назад всё работало норм а сейчас сохраняет в текстовый...

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

Почему программа иногда возвращает не нулевой результат, а иногда нуль?
С чем подобное может быть связана?

2
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
19.11.2016, 21:19
UDK,
Здесь:
C#
1
2
otr[o] = q[w, j];
i++;
массив индексируется переменной o, а инкрементируется переменная i.
Тоже самое с массивом nol.
А массивы chet и nchet индексируются одной и той же переменной. И как ни странно, это снова переменная i.
1
 Аватар для wmysterio
295 / 244 / 128
Регистрация: 24.12.2014
Сообщений: 708
19.11.2016, 21:19
Думаю, что "i++" вызывается там, где не нужно. Попробуйте этот код:
Кликните здесь для просмотра всего текста
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication24 {
    class Program {
        static void Main( string[] args ) {
            Random rnd = new Random();
            int[] otr = new int[ 20 ];
            int[] nol = new int[ 20 ];
            int[] chet = new int[ 20 ];
            int[] nchet = new int[ 20 ];
            int[,] q = new int[ 4, 4 ];
            int i = 0;
            int o = 0;
            int n = 0;
            for( int w = 0; w < 4; w++ ) {
                for( int j = 0; j < 4; j++ ) {
                    int p = rnd.Next( -20, 20 );
                    q[ w, j ] = p;
                    if( q[ w, j ] < 0 )//отрицательные
                    {
                        otr[ o ] = q[ w, j ];
                       // i++; ВОЗМОЖНО НУЖНО o++
                        Console.WriteLine( "Отрицательные {0}", q[ w, j ] );
                    }
                    if( q[ w, j ] == 0 )//нули
                    {
                        nol[ n ] = q[ w, j ];
                       // i++; ВОЗМОЖНО НУЖНО n++
                        Console.WriteLine( "Нули {0}", q[ w, j ] );
                    }
                    if( q[ w, j ] % 2 == 0 ) //чётные
                    {
                        chet[ i ] = q[ w, j ];
                        i++;
                        Console.WriteLine( "Чётные {0}", q[ w, j ] );
                    } else //нечётные
                      {
                        nchet[ i ] = q[ w, j ];
                        i++; // ? идекс точно нужно для i ? он же используется для массива chet
                        Console.WriteLine( "Нечётные {0}", q[ w, j ] );
                    }
 
                }
            }
            Console.ReadKey();
        }
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.11.2016, 21:19
Помогаю со студенческими работами здесь

Почему иногда функции передается значение int, а иногда - нет?
1 случай: void Function_1(int* &amp; rVarOne, int* &amp;rVarTwo) { /* Какие-то операции с указателями: rVarOne++; *rVarOne =...

Подскажите где ошибка. Выдаёт арифметическое переполнение?
program z1; USES crt; const N= 10; var x: array of integer; i: integer; y: array of integer; begin ClrScr; randomize; for...

Генерация массива случайных чисел код выдаёт неправильный результат
Вот код : #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;cstdlib&gt; #include &lt;cmath&gt; using namespace std; ...

Переполнение стека - почему?
Опять вопрос по редактору графов) У меня есть JSpinner, который отвечает за выбор начальной вершины для алгоритма. Сначала он был...

Почему происходит переполнение?
Если диапазон float: -2 147 483 648.0 / 2 147 483 647.0, то почему происходит переполнение. Или это что-то другое? P.S.: тогда что...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru