我是一名新手程序员,仍然是C#的新手。我想知道为什么我的应用程序无法正确计算用户的GPA。代码看起来很好。如果有改进我的代码的提示,我感激不尽。
例如,如果用户为信用单元5的模块#1输入A级,为信用单元2输入模块#2的B级,则在按0退出后,GPA计算将为0.0
基本上,用户可以为他想要的任意数量的模块计算他的GPA。模块和信用单元的算法似乎没问题,但我仍然不明白为什么GPA不正确。
class Program
{
static void Main(string[] args)
{
Console.Write("\n********************************************\n");
int creditUnit = 0;
int totalCreditUnit = 0;
char grade = ' ';
int gradePoint = 0;
int total = 0;
int counter = 0;
double GPA = 0;
do
{
Console.Write("Enter grade for module #{0} (press 0 to exit): ", counter += 1);
// write some code to prevent user from entering more than 10
char userInput = char.Parse(Console.ReadLine());
if (userInput == '0')
{
break;
}
else
{
grade = userInput; //assigns value for userInput into gradePoint
Console.Write("Enter credit unit(s) for grade: ");
totalCreditUnit = int.Parse(Console.ReadLine());
switch (grade)
{
case 'A': gradePoint += 4;
break;
case 'B': gradePoint += 3;
break;
case 'C': gradePoint += 2;
break;
case 'D': gradePoint += 1;
break;
}
total += creditUnit * gradePoint;
totalCreditUnit += creditUnit;
}
} while (grade != 0);
GPA = total / totalCreditUnit;
Console.Write("Your GPA this semester is {0:F2}", GPA);
Console.ReadKey();
}
}
答案 0 :(得分:0)
这是你的问题:
totalCreditUnit = int.Parse(Console.ReadLine());
那应该是creditUnit
而不是totalCreditUnit
。后来你正在做:
total += creditUnit * gradePoint;
totalCreditUnit += creditUnit;
creditUnit
始终为零,因此您永远不会向总计添加任何内容,并始终将零除以totalCreditUnit
。
现在是学习在Visual Studio中使用调试器的好时机。如果您自己检查了total
和totalCreditUnit
的值,您会很快发现这一点。在执行除法操作时,我也会将它们加倍。