SpazticUnicorn Ответов: 1

Выведите позицию массива C#


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

мне нужно, чтобы он хранил массив[индекс] по неправильным вопросам, а затем выводил каждый вопрос.... Пожалуйста, дайте мне знать, если мне нужно отредактировать этот вопрос или быть более глубоким в моей информации
private const string STR_RESOURCE_PATH = @"Resources\\";

    static void Main(string[] args)
    {
        MultipleChoiceQuestion[] questionList = new MultipleChoiceQuestion[30];
        int option;
        int correct = 0;
        int incorrect = 0;
        int index = 0;

        do
        {
            DisplayMenuOptions();
            option = Valid.GetValidInteger("\nOption?", 0, 8);

            switch (option)
            {
                case 1:
                    CreateNewQuestion(ref questionList);
                    break;
                case 2:
                    DisplayAllQuestions(ref questionList);
                    break;
                case 3:
                    EditQuestions(ref questionList);
                    break;
                case 4:
                    DeleteQuestion(ref questionList);
                    break;
                case 5:
                    ImportQuiz(ref questionList);
                    break;
                case 6:
                    ExportQuiz(ref questionList);
                    break;
                case 7:
                    TakeQuiz(ref questionList, ref correct, ref incorrect);
                    break;
                case 8:
                    MarkQuiz(ref questionList, ref correct, ref incorrect);
                    break;
            }

        } while (option != 0);
        Console.ReadLine();
    }
    private static void DisplayMenuOptions()
    {
        Console.WriteLine("Multiple Choice Exam");
        Console.WriteLine("----------------------");
        Console.WriteLine("Please enter: ");
        Console.WriteLine("   1 - to create a new question");
        Console.WriteLine("   2 - to display all questions");
        Console.WriteLine("   3 - to edit question");
        Console.WriteLine("   4 - to delete question");
        Console.WriteLine("   5 - to import questions for a file");
        Console.WriteLine("   6 - to export questions to a file");
        Console.WriteLine("   7 - to start exam");
        Console.WriteLine("   8 - to mark exam");
        Console.WriteLine("   0 - to exit program");
    }
    public static int GetNextArrayIndex(ref MultipleChoiceQuestion[] questionList)
    {
        int index = -1;


        for (int i = 0; i < questionList.Length; i++)
        {
            if (questionList[i] == null)
            {
                index = i;
                break;
            }
        }

        return index;
    }

    private static void CreateNewQuestion(ref MultipleChoiceQuestion[] questionList)
    {            ;
        string question;
        string choice1;
        string choice2;
        string choice3;
        string choice4;
        char correctChoice;

        int index = GetNextArrayIndex(ref questionList);

        Console.WriteLine("Multiple Choice Exam - New Question");
        Console.WriteLine("--------------------------------------");
        Console.WriteLine("There are currently {0} questions in the exam.", index);

        if (index != -1)
        {
                Console.Write("Enter question: ");
                question = Console.ReadLine();
                Console.Write("Enter Choice 1 for the question: ");
                choice1 = Console.ReadLine();
                Console.Write("Enter Choice 2 for the question: ");
                choice2 = Console.ReadLine();
                Console.Write("Enter Choice 3 for the question: ");
                choice3 = Console.ReadLine();
                Console.Write("Enter Choice 4 for the question: ");
                choice4 = Console.ReadLine();

                do
                {
                    Console.Write("Enter the correct choice: (A, B, C or D): ");
                    correctChoice = char.Parse(Console.ReadLine().ToUpper());
                    if (correctChoice == 'A' || correctChoice == 'B' || correctChoice == 'C' || correctChoice == 'D')
                    {
                        questionList[index] = new MultipleChoiceQuestion(question, choice1, choice2, choice3, choice4, correctChoice);
                        Console.WriteLine("Successfully added question {0} to the exam\n", index);
                    }
                    else
                    {
                        Console.WriteLine("Sorry invalid input.");
                    }

                } while (correctChoice != 'A' && correctChoice != 'B' && correctChoice != 'C' && correctChoice != 'D');


            Console.WriteLine("Press any key to continue");
        }
    }

    public static char TakeQuiz(ref MultipleChoiceQuestion[] questionList, ref int correct, ref int incorrect)
    {
        char answers = 'w'; //so the computer will not allow use to input a w
        int index = GetNextArrayIndex(ref questionList);

        for (int i = 0; i < questionList.Length; i++)
        {
            if (questionList[i] != null)
            {
                questionList[i].DisplayQuestion();
                Console.Write("\nYour anwser (A,B,C,D): ");
                answers = char.Parse(Console.ReadLine().ToUpper());//Stores users answers to that question

                if (answers == 'A' || answers == 'B' || answers == 'C' || answers == 'D')//If these values are entered than will run next if else 
                {
                    if (answers == questionList[i].correctChoice)//If the user enters a value that matches its correct answers it will store in correct
                    {
                        correct++;

                    }
                    else
                    {
                        index = i;
                        questionList[incorrect].question += index;
                        incorrect++;

                        if (questionList[index] == null)
                        {
                            for (int p = index; p < questionList.Length; p++)
                            {
                                if (i + 1 < questionList.Length)
                                {
                                    questionList[i] = questionList[i + 1];
                                }
                            }
                        }
                    }
                }
                else
                {
                    Console.WriteLine("ERROR: Invalid input");
                    i = i - 1;//Gose back in array to give the user the ability to re-input there valid answers

                }

            }
        }
        return answers;
    }

    public static void MarkQuiz(ref MultipleChoiceQuestion[] questionList, ref int correct, ref int incorrect)
    {
        int index = ArrayIndex(ref questionList);
        double rightAnwser;
        double percent = 0.00;

        Console.WriteLine("Multiple Choice Exam - Mark Exam");
        Console.WriteLine("---------------------------------------");

        rightAnwser = correct;
        percent = (rightAnwser / (rightAnwser + incorrect));

        if (percent >= .83)
        {
            Console.WriteLine("You got {0:P2}. You got {1} questions correct out of {2}", percent, correct, correct + incorrect);
            Console.WriteLine("You passed the exam.");
            Console.WriteLine("Press any key to continue.");
        }
        else
        {
            Console.WriteLine("You got {0:P2}. You got {1} questions correct out of {2}", percent, correct, correct + incorrect);
            Console.WriteLine("You failed the exam.");
            Console.WriteLine("The following questions were anwsered incorrectly:  ");

            for (int n = 0; n < incorrect; n++)//Loops question numbers
            {
                if (index > 0)
                {
                    Console.Write("{0}, ",n + index);
                }
            }
        }
        Console.Write("\b\b ");
        Console.ReadLine();
    }
}

}


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

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

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

lw@zi

Из того, что я понял, у вас возникли проблемы с поиском вопросов с неправильными ответами. Это верно?

Member 12815488

массив.помощи indexOf()

кажется, может быть, было бы проще построить список неправильных вопросов и просто вывести этот список?

1 Ответов

Рейтинг:
0

OriginalGriff

Есть несколько вещей, которые вам нужно изменить для начала.
Во-первых, прекратите использовать ref везде - вам это не нужно для сбора вопросов, и это вводит в заблуждение для ваших целых чисел.
Во-вторых, перестаньте заново изобретать колесо и используйте "встроенные" функции фреймворка.

Итак, полностью удалите метод GetNextArrayIndex и измените список вопросов на a List<MultipleChoiceQuestion> вместо.

Затем вы можете использовать Add, чтобы добавить вопрос в конец, не думая о том, что это может быть индекс:

private static MultipleChoiceQuestion CreateNewQuestion()
   {
   ... Read your question details here ...
   return new MultipleChoiceQuestion(question, choice1, choice2, choice3, choice4, correctChoice);
   }
Затем, когда вы используете его, вы добавляете его в свою коллекцию:
case 1:
    questionList.Add(CreateNewQuestion());
    break;
Таким образом, методу остается только одно - создать вопрос, не зная и не думая о том, что с ним будет делать остальная часть кода. Это называется разделение интересов и это делает ваш код чище, легче читаемым и намного более надежным / ремонтопригодным.
Сделайте то же самое с другими методами, а затем измените способ TakeQuiz
работает:
public static void TakeQuiz(List<MultipleChoiceQuestion> questions, List<MultipleChoiceQuestion> correct, List<MultipleChoiceQuestion> incorrect)
   {
   ...
   }
Внутри метода вы можете просто использовать foreach чтобы получить каждый вопрос по очереди (не беспокоясь о его индексе), и если он получит его правильно, он пойдет в correct коллекция, в противном случае incorrect.
Затем вызывающий код может определить количество правильных и неправильных ответов с помощью свойства collections Count и может перебирать неправильные ответы с помощью другого foreach для неправильной коллекции.