首页 > 解决方案 > 尝试在 main 方法中调用类构造函数,以便创建报告卡

问题描述

我正在尝试创建一个成绩单课程并将一个字母等级返回给 main。我为成绩单使用了一个类构造函数,因为实际的成绩单必须是一个类。如果输入了无效值,它将返回参数异常,提示用户重试。这是我的代码:

using System;
using static System.Console;
class StudentGradeDemo
{
    static void Main()
    {
        char lettergrade = new ReportCard();
    }

    class StudentGrades
    {
        public string studentName;
        public double midtermGrade;
        public double finalExamGrade;
        public char letterGrade;


        public char ReportCard(string studentName, double midtermGrade, double finalExamGrade)
        {
            char[] letterGrade = { 'A', 'B', 'C', 'D', 'F' };
            Console.WriteLine("Enter midterm grade");
            midtermGrade = Convert.ToInt32(Console.ReadLine());
           if(midtermGrade >= 0 && midtermGrade <= 100)
            {
                Console.WriteLine("Enter final exam grade");
                finalExamGrade = Convert.ToInt32(Console.ReadLine());
                if (finalExamGrade >= 0 && midtermGrade <= 100)
                {
                    double gradeAverage = ((midtermGrade + finalExamGrade) / 2);
                    if(gradeAverage >= 90 && gradeAverage <= 100)
                    {
                        return letterGrade[0];
                    }
                    else if(gradeAverage >= 80 && gradeAverage <= 90)
                    {
                        return letterGrade[1];
                    }
                    else if(gradeAverage >= 70 && gradeAverage <= 80)
                    {
                        return letterGrade[2];
                    }
                    else if(gradeAverage >= 60 && gradeAverage <= 70)
                    {
                        return letterGrade[3];
                    }
                    else if(gradeAverage < 60)
                    {
                        return letterGrade[4];
                    }
                }
                else
                {
                    try
                    {
                        throw new System.ArgumentException();
                    }
                    catch (ArgumentException)
                    {
                        Console.WriteLine("Grades must be between 0 - 100");
                        return letterGrade[0];
                    }
                }
            }
            else
            {
                try
                {
                    throw new System.ArgumentException();
                }
                catch (ArgumentException)
                {
                    Console.WriteLine("Grades must be between 0 - 100");
                    return letterGrade[0];
                }
            }
            return letterGrade[0];
        }
    }
}

返回的错误是:Error CS0246 The type or namespace name 'ReportCard' could not be found (are you missing a using directive or an assembly reference?)

标签: c#

解决方案


您需要做的第一件事是创建StudentGrades该类的实例。这将允许您访问该ReportCard方法,因为它是类的方法。(见#1)。https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/methods

接下来,如果您查看该ReportCard方法,它需要 3 个参数:studentName、midtermGrade、finalGrade。当你调用它时,这些值必须传递到方法中(参见#2)。https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/passing-parameters

static void Main()
{
    var studentGrades = new StudentGrades(); // #1

    Console.WriteLine("Enter student name");
    var studentName = Console.ReadLine();

    Console.WriteLine("Enter midterm grade");
    var midtermGrade = Convert.ToDouble(Console.ReadLine());

    Console.WriteLine("Enter final exam grade");
    var finalExamGrade = Convert.ToDouble(Console.ReadLine());

    var lettergrade = studentGrades.ReportCard(studentName, midtermGrade, finalExamGrade); // #2

    Console.WriteLine($"{studentName}'s grade is an {lettergrade}");
}

更新:如果您想读取用户的输入,请读取每一行并分配给适当的变量以传入。我从您的 ReportCard 方法中获取了此代码,因此您需要确保将其从那里删除。此外,您应该对期中考试和期末考试进行适当的类型检查和处理。我会把它留给你。


推荐阅读