Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 02.10.2017
Сообщений: 7
1
.NET 4.x

Программа работает правильно только в режиме отладки

06.01.2018, 18:52. Показов 2757. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!

Есть программа для генерирования лабиринта.
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
public double[,] generate_lab(int n, int m)
        {
            // n - количество строк лабиринта
            // m - количество столбцов лабиринта
 
            double[,] lab = new double[n, m];
            double[] row = new double[m];
 
            for (int i = 0; i < m; i++)
            {
                row[i] = 0;
            }
 
            for (int i = 0; i < n; i++)
            {
                //шаг 5
                for (int i1 = 0; i1 < m; i1++)
                {
                    double c1c = Math.Truncate(row[i1]);
                    double c1d = row[i1] - c1c;
 
                    if (c1d != 0)
                    {
                        row[i1] = 0;
                    }
                }
 
                row = generate_row(m, row);
 
                for (int i1 = 0; i1 < m; i1++)
                {
                    lab[i, i1] = row[i1];
                }
                System.Threading.Thread.Sleep(25);
            }
 
            return lab;
        }
функция generate_row
Кликните здесь для просмотра всего текста

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
 public double[] generate_row(int m, double[] row)
        {
            Random rng_r = new Random();
            int freq_right = 3;
            int freq_dowm = 12;
            
            //шаг 2
            int q = 1;
            for (int i = 0; i < m; i++)
            {
                if (row[i] == 0)
                {
                    row[i] = q;
                    q = q + 1;
                }
                else
                {
                    q = (int)row[i] + 1;
                }
            }
 
            //шаг 3   Создадим границы справа
            for (int i = 0; i < m - 1; i++)
            {
                if (GenerateDigit(rng_r, freq_right) == 0)
                {
                    row[i + 1] = row[i];
                }
            }
            if (GenerateDigit(rng_r, freq_right) == 0)
            {
                row[m - 1] = row[m - 2];
            }
 
            //шаг 4   Создание нижних границ
            for (int i = 0; i < m - 1; i++)
            {
                if (row[i] == row[i + 1])
                {
                    if (GenerateDigit(rng_r, freq_dowm) != 1)
                    {
                        if (GenerateDigit(rng_r, 2) != 1)
                        {
                            row[i] = row[i] + 0.5;
                        }
                        else
                        {
                            row[i + 1] = row[i + 1] + 0.5;
                        }
                    }
                }
            }
            return row;
        }


Если строку
C#
1
System.Threading.Thread.Sleep(25);
закоментировать, то массив lab заполняется одинаковыми строками.
В режиме отладки, либо если строку раскоментировать, то массив заполняется разными строками.

Фото примеров выполнения...
Кликните здесь для просмотра всего текста



Помогите, пожалуйста, разобраться почему так происходит?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2018, 18:52
Ответы с готовыми решениями:

Приложение работает только в режиме отладки
Добрый день,проблема в работе приложения,когда запускаю в Debug все работает,при попытке открыть в...

Программа работает правильно только в режиме отладки
Если запускаю программу через f5 , все отлично отрабатывает...если через Ctrl + f5, возникают...

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

Программа корректно работает только в режиме отладки
Добрый день. В ходе лабораторной понадобилось написать функции, аналоги стандартным функциям для...

3
Эксперт .NET
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
06.01.2018, 18:54 2
Random вынести из функции... И Debug тут не причем.

C#
1
static Random rng_r = new Random();
1
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
06.01.2018, 18:58 3
Лучший ответ Сообщение было отмечено kirino как решение

Решение

Цитата Сообщение от kirino Посмотреть сообщение
почему так происходит?
Random-это псевдослучайный генератор, основан на системном времени. Если быстро генерировать последовательность чисел, то вполне вероятно появление одинаковых чисел.

Добавлено через 1 минуту
Цитата Сообщение от Someone007 Посмотреть сообщение
Debug тут не причем.
Someone007, думаю ТС имел ввиду пошаговую отладку. При таком варианте да, числа будут разные (та же задержка).
1
0 / 0 / 0
Регистрация: 02.10.2017
Сообщений: 7
06.01.2018, 19:09  [ТС] 4
Someone007, insite2012, Спасибо!

Цитата Сообщение от insite2012 Посмотреть сообщение
думаю ТС имел ввиду пошаговую отладку. При таком варианте да, числа будут разные (та же задержка).
Вы правы. Я проверял через пошаговую отладку. И еще вместо System.Threading.Thread.Sleep писал MessageBox.Show("123") и тоже норм было. Теперь понятно.
0
06.01.2018, 19:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2018, 19:09
Помогаю со студенческими работами здесь

Код работает только в режиме отладки
Вот этот злощастный код. А вот в чем его странность: когда я его обрабатываю построчно (F8),...

Функция работает только в режиме отладки.
народ , подскажите кто знает, у меня есть библиотека XLL без исходников с множеством длинных...

STM32 - программа выполняется только в режиме отладки
Честное слово, я внимательно искал такую тему, не нашел :) Собрал свою плату с STM32F103C8T6,...

Макрос работает корректно только в режиме отладки
Доброго времени суток! Как всегда ниид хэлп, столкнулся с одной проблемой: написал код в...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru