使用for和while的C#Sharp Grade程序

时间:2019-02-20 21:03:33

标签: c#

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

完成后,我也很难将信息传递到第二个菜单以获取平均值。我在Java中做得更好,但是在那里我们有一定的等级。然后,我们为每个年级设置一个变量。最后,我们将它们相加并除以设定的数字。

if (!$(".objectA").html()) {
    $("#objectB").hide();
}

3 个答案:

答案 0 :(得分:1)

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

    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之类的类。

答案 1 :(得分:0)

因此,我想强调几件事,并且还在代码中添加了注释。您想在整个程序/方法中保留2个变量,以跟踪输入的所有内容。它们是2个平均值(1)总数和(2)输入数量的计数。查看代码并逐行阅读并查看注释。希望这对您有所帮助。如有疑问,请随时提问。

bool exit = false;

// added variables outside of loop so they are available everywhere in the method
double grades = 0;
int gradesCount = 0;

do
{
    Console.WriteLine("1. Enter Grades");
    Console.WriteLine("2. Get Average");
    Console.WriteLine("3. exit");
    string input = Console.ReadLine();
    Console.WriteLine("");


    if (input == "1")
    {
        int totalGrades = 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");
        }

        // increment the count of grades by the number of grades the user wants to add
        gradesCount += totalGrades;

        // variable to keep a count and avoid infinite loop
        int addedGradesCount = 0;

        // while loop works like a for loop using our variable to keep count of grades we add
        while (addedGradesCount < totalGrades)
        {
            Console.WriteLine("Enter Grade: ");

            // variable to store entered grade
            double newGrade = 0;

            //Reusing code from while loop above for TryParse
            while (!double.TryParse(Console.ReadLine(), out newGrade))
            {
                Console.WriteLine("Please enter a valid number");
            }

            // increment running total of grades with the user input number
            grades += newGrade;

            // output to user - got rid of loop through totalGrades
            Console.WriteLine("You entered: " + newGrade + " - Total: " + grades);

            // increment variable to keep count! if this is not here, you will have infinite loop
            addedGradesCount++;
        }
        // Console.ReadLine(); // not needed
    }
    else if (input == "2")
    {
        // calculate average using the method variables we initialized at the beginning
        double average = (grades / gradesCount);

        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);

Console.ReadKey();

答案 2 :(得分:0)

这似乎可行

PvBuffer buffer;
PvResult operationalResult;
var filename = "...some filename...";
var result = stream.RetieveBuffer(ref buffer, ref operationalResult, 100);

if(result.IsOK())
{
    PvImage image = buffer.Image;
    var bitmap = new System.Drawing.Bitmap(
        width: (int)image.Width,
        height: (int)image.Height,
        format: PixelFormat.Format24bppRgb
    );

    image.CopyToBitmap(bitmap);

    bitmap.save(filename, ImageFormat.Jpeg);
}