首页 > 解决方案 > 使用 for 和 while 的 C# Sharp Grade 程序

问题描述

我是 C# 新手,在嵌套循环方面遇到了麻烦。我正在开发一个带有菜单的评分程序。第一个菜单询问用户他们想输入多少个等级。然后,用户输入成绩。第二个菜单计算平均值和等级。我在使用嵌套循环时遇到问题,它会要求您在给定的时间内输入成绩。

完成后,我也很难将该信息传递到第二个菜单以获得平均值。我在 Java 中做得更好,但我们有一定的成绩;然后,我们为每个年级制作了一个变量。最后,我们将它们相加并除以一组数字。

bool exit = false;

do
{
    Console.WriteLine("1. Enter Grades");
    Console.WriteLine("2. Get Average");
    Console.WriteLine("3. My program");
    Console.WriteLine("4. exit");

    string input = Console.ReadLine();

    Console.WriteLine("");

    if (input == "1")
    {
        int totalGrades = 0;
        double grades;
        double grade, finalGrade = 0;

        //User Input
        Console.WriteLine("How many grades do you want to enter? ");

        //While loop for TryParse
        while(!int.TryParse(Console.ReadLine(),out totalGrades))
        {
            Console.WriteLine("Please enter a valid number");
        }

        while (totalGrades < 1)
        {
            Console.WriteLine("Enter Grade: ");
            string input = Console.ReadLine();

            for (int i = 0; i<= totalGrades; totalGrades++)

            Console.WriteLine(totalGrades);
        }

        Console.ReadLine();
    }
    else if (input == "2")
    {
        double average = 0;

        if (average >= 90)
        {
            Console.WriteLine($"The average is a {average} which is an A.");
        }
        else if (average >= 80)
        {
            Console.WriteLine($"The average is a {average} which is an B.");
        }
        else if (average >= 70)
        {
            Console.WriteLine($"The average is a {average} which is an C.");
        }
        else if (average >= 60)
        {
            Console.WriteLine($"The average is a {average} which is an D.");
        }
        else
        {
            Console.WriteLine($"The average is a {average} which is an E.");
        }
    }
    else
    {
        exit = true;
    }
} 
while (exit == false);

标签: c#

解决方案


为了使代码更易于理解,我更改了一些内容。

    private static void Main(string[] args)
    {
        ProgramLoop();
    }

    private static void ProgramLoop()
    {
        var grades = new List<double>();
        double average;
        var exit = false;

        do
        {
            System.Console.WriteLine("1. Enter Grades");
            System.Console.WriteLine("2. Get Average");
            System.Console.WriteLine("3. My program");
            System.Console.WriteLine("4. exit");

            var input = System.Console.ReadLine();

            System.Console.WriteLine("");

            switch (input)
            {
                case "1":
                    grades = EnterGrades();
                    break;
                case "2":
                    average = GetAverage(grades);
                    break;
                case "3":
                    MyProgram();
                    break;
                case "4":
                    exit = true;
                    break;
                default:
                    System.Console.WriteLine($"'{input}' is not a valid choice.");
                    break;
            }
        }
        while (exit == false);
    }

    private static List<double> EnterGrades()
    {
        int numberOfGrades = 0;
        var grades = new List<double>();

        System.Console.WriteLine("How many grades do you want to enter? ");

        // Read number of grades
        while (!int.TryParse(System.Console.ReadLine(), out numberOfGrades) || numberOfGrades < 1)
        {
            System.Console.WriteLine("Please enter a valid number");
        }

        while (grades.Count != numberOfGrades)
        {
            // Read grade
            System.Console.WriteLine("Enter Grade: ");
            double grade;

            while (!double.TryParse(System.Console.ReadLine(), out grade) || grade < 0 || grade > 100)
            {
                System.Console.WriteLine("Please enter a valid grade between 0.0 and 100.0");
            }

            grades.Add(grade);
        }

        return grades;
    }

    private static double GetAverage(IList<double> grades)
    {
        var average = grades.Average();

        if (average >= 90)
        {
            System.Console.WriteLine($"The average is {average}, which is an A.");
        }
        else if (average >= 80)
        {
            System.Console.WriteLine($"The average is {average}, which is an B.");
        }
        else if (average >= 70)
        {
            System.Console.WriteLine($"The average is {average}, which is an C.");
        }
        else if (average >= 60)
        {
            System.Console.WriteLine($"The average is {average}, which is an D.");
        }
        else
        {
            System.Console.WriteLine($"The average is {average}, which is an E.");
        }

        return average;
    }

我建议您将代码拆分为方法。代码会更容易理解,最好不要把太多代码塞在一起。

如果您计划添加更多功能并编写更多代码,我还建议您研究如何将面向对象编程应用于此,即编写像 GradeCard 这样的类。


推荐阅读