Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 01.10.2016
Сообщений: 239

Инициализация массива ответов в цикле

18.02.2017, 09:58. Показов 544. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, вообщем есть массив bool и есть база данных с полем "Правильность ответа" - bool. массив изначально false нужно заполнить только те ячейки в которых ответ который подсвечен крыжеком в БД. И если правильных ответов = 1 то радиобуттон. >1 то checkbox. код для наглядности
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
namespace AccessAutorization
{
    public partial class Test : Form
    {
        bool[,] ua = new bool[16, 6];
        bool[,] ca = new bool[16, 6];
        int questionNumber;
        int second = 59;
        int minute = 19;
        List<Question> questions;
        const string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:/Показать шпаковой/Вопросы.mdb";
        OleDbConnection connect = new OleDbConnection(ConnectionString);
        public Test()
        {
            InitializeComponent();
        }
 
        private void Test_Load(object sender, EventArgs e)
        {
            label1.Text = Users.user;
            timer1.Interval = 1000;
            timer1.Start();
            int counter = 0;
            questions = new List<Question>();
            using (var connect = new OleDbConnection(ConnectionString))
            {
                var cmd = new OleDbCommand("SELECT Вопросы.[ID вопроса], Ответы.ID AS [ID ответа], Вопросы.[Текст] AS [Текст вопроса], Ответы.[Текст] AS [Текст ответа], [Правильность ответа] FROM Вопросы LEFT JOIN Ответы ON Ответы.[ID вопроса] = Вопросы.[ID вопроса] ORDER BY Вопросы.[ID вопроса], Ответы.ID");
                cmd.Connection = connect;
                connect.Open();
                using (var reader = cmd.ExecuteReader())
                {
                    int prevQuestionId = -1;
                    Question currentQuestions = null;
                    while (reader.Read())
                    {
                        int questionId = (int)reader["ID вопроса"];
                        if (questionId != prevQuestionId)
                        {
                            currentQuestions = new Question()
                            {
                                ID = questionId,
                                Text = (string)reader["Текст вопроса"],
                                Answers = new List<Answer>()
                            };
                            questions.Add(currentQuestions);
 
                        }
 
                        currentQuestions.Answers.Add(new Answer
                        {
                            ID = (int)reader["ID ответа"],
                            Text = (string)reader["Текст ответа"],
                            IsCorrect = (bool)reader["Правильность ответа"]
                        });
                        prevQuestionId = questionId;
                        for (int i = 0; i < currentQuestions.Answers.Count; i++)
                               ca[counter, i] = currentQuestions.Answers[i].IsCorrect;
                        counter++;
                    }
                }
            }
        }
C#
1
ca[counter, i] = currentQuestions.Answers[i].IsCorrect;
- индекс вне границ массива.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.02.2017, 09:58
Ответы с готовыми решениями:

.sh файл: инициализация переменных из массива в цикле
Ребята, подскажите, пожалуйста! Есть массив переменных: links=('applName' 'registrationLink' 'replacementsLink')Нужно...

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

Обьявление и инициализация переменных в цикле: как это работает (что там происходит)?
Здравствуйте! Можете помочь понять обьявление переменных Вот код: #include &lt;iostream&gt; #include &lt;string&gt; ...

1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
18.02.2017, 14:45
connection123, выход за пределы массива происходит потому что ты увеличиваешь переменную counter - которая по идее должна означать номер вопроса - на каждой итерации. То есть если у вопроса 6 ответов, то после 6 итераций переменная counter будет равна 6. А должна быть равна 1. Также в коде скрыта потенциальная ошибка с кол-вом вопросов и ответов т.к. размер массивов ua,ca задается сразу без учета реального количества вопросов и ответов. Лучше сделать примерно так:
Кликните здесь для просмотра всего текста
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
    public partial class Test : Form
    {
        bool[,] ua, ca;
        int questionNumber;
        int second = 59, minute = 19;
        List<Question> questions;
        const string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:/Показать шпаковой/Вопросы.mdb";
 
        public Test()
        {
            InitializeComponent();
        }
 
        private void Test_Load(object sender, EventArgs e)
        {
            label1.Text = Users.user;
            timer1.Interval = 1000;
            timer1.Start();
 
            questions = GetQuestions();
 
            // connection123 - Выбери один из двух вариантов, ненужный вариант закоментируй
            // 1) Если количество ответов у всех вопросов одинаковое, то используем этот код
            ua = new bool[questions.Count, 6];
            ca = new bool[questions.Count, 6];
 
            // 2) Если количество ответов у всех вопросов может быть разным, то используем этот код
            int maxAnswers = questions.Max(q => q.Answers.Count);
            ua = new bool[questions.Count, maxAnswers];
            ca = new bool[questions.Count, maxAnswers];
            // Конец выбора варианта
 
            for (int q=0; q<questions.Count; q++)
            {
                for (int a=0; a<questions[q].Answers.Count; a++)
                {
                    // Инициалиазция массивов
                    // Допиши самостоятельно
                    // q - номер вопроа, a - номер ответа
                    ...
                }
            }
        }
 
        // Метод получения ответов и вопросов из базы данных
        // НИЧЕГО ДРУГОГО ОН НЕ ДОЛЖЕН ДЕЛАТЬ
        static List<Question> GetQuestions()
        {
            var questions = new List<Question>();
            using (var connect = new OleDbConnection(ConnectionString))
            {
                var cmd = new OleDbCommand("SELECT Вопросы.[ID вопроса], Ответы.ID AS [ID ответа], Вопросы.[Текст] AS [Текст вопроса], Ответы.[Текст] AS [Текст ответа], [Правильность ответа] FROM Вопросы LEFT JOIN Ответы ON Ответы.[ID вопроса] = Вопросы.[ID вопроса] ORDER BY Вопросы.[ID вопроса], Ответы.ID");
                cmd.Connection = connect;
                connect.Open();
                using (var reader = cmd.ExecuteReader())
                {
                    int prevQuestionId = -1;
                    Question currentQuestion = null;
                    while (reader.Read())
                    {
                        int questionId = (int)reader["ID вопроса"];
                        if (questionId != prevQuestionId)
                        {
                            currentQuestion = new Question()
                            {
                                ID = questionId,
                                Text = (string)reader["Текст вопроса"],
                                Answers = new List<Answer>()
                            };
                            questions.Add(currentQuestion);
 
                        }
 
                        currentQuestion.Answers.Add(new Answer
                        {
                            ID = (int)reader["ID ответа"],
                            Text = (string)reader["Текст ответа"],
                            IsCorrect = (bool)reader["Правильность ответа"]
                        });
                        prevQuestionId = questionId;
                    }
                }
            }
            return questions;
        }


Добавлено через 4 минуты
Ну и неплохо внимательнее читать сообщения других пользователей. Aferuga уже отвечал тебе как исправить эту ошибку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.02.2017, 14:45
Помогаю со студенческими работами здесь

инициализация массива, вывод массива и обработка массива должны быть реализованы с помощью функций.
1 Последовательность a1; a2; ...; an состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы. 2 У...

Тесты (несколько вариантов ответов, число правильных ответов, оценка)
Please, помогите написать тесты в QBasic чтоб было несколько вариантов ответов, еще чтоб в конце показывало сколько правельных ответов и...

Функция обхода документов-ответов, ответов на ответы и т.д.
Вобщем нужна фунция, чтобы в одну коллекцию собирались все ответы, ответы их ответов и так далее. Наверняка у кого-нибудь есть такая,...

Перевод массива комплексных чисел в массив float. Инициализация двумерного массива
Здравствуйте! Начал осваивать python и никак не могу разобраться. Есть массив list, состоящий из n числа строк и 2048 столбцов, значения в...

Тест элементы массива с вариантами ответов
21) Элементы двухмерного массива A размером 1010 первоначально были равны 1. Затем значения некоторых из них меняют с помощью следующего...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru