在方法之间传递变量

时间:2017-04-17 18:39:30

标签: c# methods

我的程序中有2个方法。 1.开始考试 2.标记考试

你看,

在第一种方法中,我计算了多少问题是正确还是错误。

第二,我想显示结果。

问题: 如何在方法之间传递correctAnswers和wrongAnswers以及LIST?

这就是我所拥有的:

       static void Main(string[] args)
    {
        int menuChoice = 99;
        Question[] questions = new Question[30];


        do
        {
                Console.Clear();

                DisplayMenu();

                menuChoice = InputOutput_v1.GetValidInt("Option");

                switch (menuChoice)
                {
                    case 1:
                        InputOutput_v1.DisplayTitle("Start Exam");
                        CreateQuestion(questions);
                        break;

                    case 2:
                        InputOutput_v1.DisplayTitle("Mark Exam");
                        DisplayAllQuestions(questions);
                        break;
        }

        } while (menuChoice != '0') ;
    }

    public static void StartExam(Question[] questions)
    {
        char[] studentAnswers = new char[30];
        int[] wrongAnswers = new int[30];
        int correctlyAnswered = 0;
        int falselyAnswered = 0;
        string list = "";

        Console.Clear();
        Console.WriteLine("== DO NOT CHEAT! ==\n");
        Console.WriteLine("----------------");

        for (int i = 0; i < studentAnswers.Length; i++)
        {
            Console.WriteLine("\nQuestion {0}", i + 1);
            Console.WriteLine("------------");
            questions[i].DisplayQuestion();

            studentAnswers[i] = InputOutput_v1.GetValidChar("Your Answer (A, B, C, D)");

                if (studentAnswers[i] == questions[i].correctAnswer)
                {
                    correctlyAnswered = correctlyAnswered + 1;
                }

                else
                {
                    falselyAnswered = falselyAnswered + 1;
                    wrongAnswers[i] = i + 1;
                    list += i + 1 + ", ";
                } 
        }
    }
    public static void MarkExam(Question[] questions)
    {

        if (correctlyAnswered >= 15)
        {
            Console.WriteLine("Passed with {0} correct answers", correctlyAnswered);
        }
        else
        {
            Console.WriteLine("Failed with {0} incorrect answers. Incorrect answers are: {1} ", falselyAnswered, list.Remove(list.Length - 2));
        }
        Console.ReadLine();

    }

3 个答案:

答案 0 :(得分:1)

将correctAnswers,wrongAnswers和LIST定义为方法之外的全局变量,例如

private int correctlyAnswered;
private int falselyAnswered;
private Question[] questions;

答案 1 :(得分:1)

那么,为什么你不能调用你的MarkExam()方法传递像

这样的变量
public static void StartExam(Question[] questions)
{
    char[] studentAnswers = new char[30];
    int[] wrongAnswers = new int[30];
    int correctlyAnswered = 0;
    int falselyAnswered = 0;
    string list = "";

    ........
    MarkExam(questions, wrongAnswers, correctlyAnswered);

在这种情况下,您必须相应地更改方法签名

答案 2 :(得分:0)

首先,为什么使用数组而不是列表?在本课程中,你的方法并不需要是静态的。

其次,为类创建私有变量,它们可以在所有方法中使用。

public class ExamClass
{
    private List<Question> questions = new List<Question>();
    private List<Question> incorrect = new List<Question>();
    private List<Question> correct = new List<Question>();

    ...
}