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

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

19.11.2016, 21:11. Просмотров 165. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2016, 21:11
Ответы с готовыми решениями:

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

Почему иногда булеву переменную можно ни к чему не приравнивать
Предисловие в двух словах - самостоятельно изучаю C# по книге Г. Шилдта. Помогите разобраться в...

Почему Application.DoEvents() иногда работает очень долго?
Добрый вечер. while (webBrowser.ReadyState != WebBrowserReadyState.Complete) { ...

Почему не выдаёт массив?
Почему не выдаёт массив? using System; using System.Collections.Generic; using...

Почему иногда свойствами называют и переменные класса, а так же set и get
Почему иногда свойствами называют и переменные класса, и так же функции set, get? Допустим...

2
Даценд
Модератор
Эксперт .NET
4099 / 3918 / 2593
Регистрация: 20.04.2015
Сообщений: 7,108
19.11.2016, 21:19 #2
UDK,
Здесь:
C#
1
2
otr[o] = q[w, j];
i++;
массив индексируется переменной o, а инкрементируется переменная i.
Тоже самое с массивом nol.
А массивы chet и nchet индексируются одной и той же переменной. И как ни странно, это снова переменная i.
1
wmysterio
149 / 148 / 76
Регистрация: 24.12.2014
Сообщений: 435
Завершенные тесты: 8
19.11.2016, 21:19 #3
Думаю, что "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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2016, 21:19

Почему функция выдаёт разные результаты с params?
первый результат 15 не правильный , при перестановки переменной g в вызове функции не понятно...

Почему считает только целые,а на десятичных выдаёт ошибку?
using System; using System.Collections.Generic; using System.Text; namespace...

Почему выдаёт ошибку что мол попытка несанкционированного доступа
написал код на СИ ШАРП: объявил переменную кода регистра и с помощью неё попытался добавить свою...


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

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

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