c# - 使用 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);
解决方案
为了使代码更易于理解,我更改了一些内容。
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 这样的类。
推荐阅读
- c++ - 如何避免由第 3 方库引起的“已定义”?
- conv-neural-network - 当我们在暗网中实现 YOLOv2 时,每 10 个 epoch 之后,图像大小就会改变。这是怎么回事?
- node.js - Mongoose 架构:TypeError:无法设置未定义的属性“generateAuthToken”
- sorting - 在 getent passwd 中按用户名字母顺序对列表进行排序的 AWK 脚本
- azure - cmd中的天蓝色登录有效,但powershell失败 - 在公司代理后面
- javascript - 未捕获的 ReferenceError:jQuery 未在 wordpress 自定义脚本中定义
- python - 全局命名空间中无法解释的变量
- firebase - Android Fabric 到 Firebase 迁移对生产应用程序的影响
- laravel - 不能在 Laravel eloquent 的 slim 3 中使用“$query”
- dart - Flutter:使用不同的数据和返回按钮刷新同一屏幕