c# - 尝试在 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?)
解决方案
您需要做的第一件事是创建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 方法中获取了此代码,因此您需要确保将其从那里删除。此外,您应该对期中考试和期末考试进行适当的类型检查和处理。我会把它留给你。
推荐阅读
- python - 如何使用 SQLite3 在页面加载/刷新时将数据插入 SQLite?
- javascript - Chrome 通知何时触发“onClosed”?
- matlab - keep matlab view open after the function exits
- angular - Ionic 3 Set date from selected date
- javascript - Vue Router 上一页无需重新加载
- regex - 使用正则表达式和 bash 在 xidel 中为 xpath 表达式创建别名
- apache-flink - 使用 Flink 处理过去 10 分钟内的 kafka 消息?
- java - Can we add spring boot cacheable method inside scheduled cache evict method for application safety?
- perl - 我想知道 seek 的效率
- java - 如何在每次测试之间清除 chrome 浏览器状态?