SpazticUnicorn Ответов: 2

C# хранит номер вопроса и выводит номер вопроса


Здравствуйте, Итак, у меня возникла логическая ошибка, Я не могу, кажется, хранить и инкрементировать переменную вопросов

Спецификации программы Отдел кадров попросил вас написать программу, которая оценивает технические навыки кандидата. Экзамен состоит из 20 вопросов с несколькими вариантами ответов. Вот правильные ответы: 1. E 2. D 3. D 4. B 5. A 6. C 7. E 8. B 9. D 10. C 11. D 12. A 13. A 14. D 15. E 16. E 17. A 18. E 19. A 20. Кандидат в DA должен правильно ответить на 15 из 20 вопросов, чтобы сдать экзамен и перейти на следующий уровень собеседований. Вопросы экзамена печатаются на бумаге, и кандидат вводит свои ответы на вопросы с помощью написанной вами программы. После того, как кандидат введет все ответы на вопросы, программа отобразит сообщение о том, что он сдали экзамен и общее количество правильных ответов, или сообщение о том, что он не сдал экзамен, а также общее количество неправильных ответов и список. номеров вопросов, на которые кандидат ответил неправильно.

Примерные данные ожидаемый результат
Сдал с 20 правильными ответами.
Сдал с 15 правильными ответами.
Не с 10 неправильных ответов. Неправильные вопросы: 6, 7, 8, 9, 10, 16, 17, 18, 19, 20 если мне нужно внести изменения в мой код/ вопросы, пожалуйста, дайте мне знать, я постараюсь сделать его максимально читабельным



Спасибо

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CPSC1012_CorePortfolioAssignment3_EmilyJohnson
{
    class Program
    {
        static void Main(string[] args)
        {
            //Declare variables
            char[] anwserKey = { 'E', 'D', 'D', 'B', 'A', 'C', 'E', 'B', 'D', 'C', 'D', 'A', 'A', 'D', 'E', 'E', 'A', 'E', 'A', 'D' };
            char anwser;

            int[] questions = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
            int correct = 0;
            int incorrect = 0;
            
            int question = questions.Length;
            int wrong = 0;
           
            for (int i = 0; i < questions.Length; i++)
            {
                question = i + 1;
                Console.Write("{0}: ", question);
                anwser = char.Parse(Console.ReadLine().ToUpper());

                if (anwser == anwserKey[i])
                {
                    correct++;
                }
                else
                {
                    incorrect++;
                    
                    if(anwser != anwserKey[i])
                    {                        
                        questions[i] = i + 1;
                        question = questions[i];
                    }
                }
            }
            if (correct >= 15)
            {
                Console.WriteLine("Passes! you got {0} questions correct", correct);
            }

            else
            {
                Console.WriteLine("Failed! you got {0} questions wrong", incorrect);
                Console.WriteLine("Incorrect Question: ");
                for (int n = 0; n < questions.Length; n++)
                {

                    Console.Write("{0} ", questions[incorrect]);
                }


            } Console.ReadLine();

        }

    }
}

2 Ответов

Рейтинг:
1

Patrice T

Сначала я бы упростил

for (int i = 0; i < questions.Length; i++)
{
    question = i + 1;
    Console.Write("{0}: ", question);
    anwser = char.Parse(Console.ReadLine().ToUpper());

    if (anwser == anwserKey[i])
    {
        correct++;
    }
    else
    {
        incorrect++;

        if(anwser != anwserKey[i])
        {
            questions[i] = i + 1;
            question = questions[i];
        }
    }
}

удалив странный бесполезный код
for (int i = 0; i < questions.Length; i++)
{
    question = i + 1;
    Console.Write("{0}: ", question);
    anwser = char.Parse(Console.ReadLine().ToUpper());

    if (anwser == anwserKey[i])
    {
        correct++;
    }
    else
    {
        incorrect++;
    }
}

Затем я бы пнул отладчик, чтобы посмотреть, что делает код.
Тогда вы должны подумать, как это сделать. questions, которые уже содержат номера вопросов, чтобы можно было сказать, какие из них были неудачными.

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

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.

[Обновление]
Проблема в вашем уме.
Хранение номера вопроса в позиции вопроса в questions было бы неплохо, если бы questions уже не содержал номер вопроса в той же позиции.
Вы должны определить, что вы храните в questions и когда, чтобы узнать, какой вопрос был провален.


SpazticUnicorn

я использовал отладчик, и я вставлял его обратно и обратно ...проблема заключается в строении номера вопроса ... независимо от того, что я делаю, он не будет хранить количество шагов, которые я повторял, используя отладчик в течение нескольких часов... я добавлял и убирал бесполезный код и методы .... тем не менее, спасибо Вам за Ваш вклад

Рейтинг:
0

Peter Leow

1. Посмотрите на эту часть:

if(anwser != anwserKey[i])
{
    questions[i] = i + 1;
    question = questions[i];
}

ты имеешь в виду:
if(anwser != anwserKey[i])
{
    i = i + 1;
    question = questions[i];
}

- Даже это неправильно. Приращение вопроса не имеет ничего общего с правильностью ответа.
2. ключ ответа-это массив, каждый его элемент ответа идентифицируется индексным номером, почему бы не использовать этот индексный номер в качестве номера вопроса, а не создавать другой массив, называемый вопросами?

3. две переменные правильные и неправильные всегда складываются в общее количество вопросов, нужны ли вам обе?
+ + + + + [Раунд 2 ] +++++
4. Если вы хотите иметь возможность выводить номера вопросов, которые имеют неправильные ответы, то вам нужно будет сохранить эти номера вопросов, я предлагаю использовать список, например
List<int> questionWithWrongAnswer = new questionWithWrongAnswer<int>();
// other code omitted
 
if (anwser == anwserKey[i])
{
    correct++;
}
else
{
    incorrect++;
                    
    questionWithWrongAnswer.Add(i);
}

Учить Список C# [^]
5. и последнее, но не менее важное: что вы думаете об этом:
incorrect = answerKey.Length - correct;


SpazticUnicorn

это хороший момент, я изменю его на индекс....
хорошо, что я могу сказать это графу ... спасибо

что касается взгляда на точку, то я изначально сделал то же самое, что и "Вы имеете в виду"...похоже, он не хочет хранить номер вопроса.....

SpazticUnicorn

просто проверил код ...мне действительно нужно неправильное и правильное, из-за результата

Peter Leow

Еще больше добавлено в мое решение.

SpazticUnicorn

Большое вам спасибо ... я еще не закончил код ... тем не менее, я думаю, что это сработает ...я не могу отблагодарить вас достаточно ... я буду держать вас в курсе, если у меня не будет прогресса