c# - 刚开始学习 c# 并且在 for 循环后无法正确划分随机数
问题描述
if(passWord == passWordInput)
{
for( int test =1; test <5; test++)
{
if(grade >= 90 && grade <=100)
{
Console.WriteLine("Exam {0} is {1},A", test, grade);
grade = num.Next(0,100);
totalGrade += grade;
}
else if(grade <90 && grade >=80)
{
Console.WriteLine("Exam {0} is {1},B", test, grade);
grade = num.Next(0,100);
totalGrade += grade;
}
else if(grade >= 70 && grade < 80)
{
Console.WriteLine("Exam {0} is {1},C", test, grade);
grade = num.Next(0,100);
totalGrade += grade;
}
else if(grade >=60 && grade < 70)
{
Console.WriteLine("Exam {0} is {1},D", test, grade);
grade = num.Next(0,100);
totalGrade += grade;
}
else
{
Console.WriteLine("Exam {0} is {1},F", test, grade);
grade = num.Next(0,100);
totalGrade += grade;
}
}
//declaring a new variable here to save on code lines
decimal average = totalGrade / 4m;
Console.WriteLine("Average: {0}", average);
}
当平均值打印出来时,如果偏离几个数字,它总是不正确的,我不知道如何修复它或我做错了什么。它总是太低。我试图在我的其他变量所在的同一部分代码中声明该变量,但它的平均值总是为 0。我在 totalgrade 更新后也更新了变量,但结果仍然相同。答案总是低几个数字。
解决方案
好的,让我们“调试”您的代码以查看发生了什么。
我们从for
循环开始,test
为 1 并且grade
没有值(我假设您已将其初始化为零),因此代码进入最后一个if
,为考试设置一个 F,生成一个新成绩并将其添加到totalGrade
. 如您所见,逻辑从一开始就存在缺陷。
让我们转到循环的最后一次迭代:test
是 4,等级是一个随机数(为简单起见,假设为 100)。代码输入第一个if
条件,打印结果 AND,生成一个新条件grade
并将其添加到totalGrade
. 看到问题了吗?
您在第一次迭代中始终使用0,而在最后一次迭代中,您为评分添加了一个额外的值。
解决方案非常简单:grade
在循环开始时生成值并将其相加为totalGrade
:
for( int test =1; test <5; test++)
{
grade = num.Next(0,100);
totalGrade += grade;
//Now you can check the grade value and print the result (without generating again grade, of course)
}
推荐阅读
- c - 打印文件的特定行
- jquery - 创建可在 Spotfire 仪表板的所有选项卡中使用的浮动文档属性控件
- tensorflow - 如何导入特定版本的 Tensorflow.js?
- php - 使用 verot class.upload.php 在数组中上传
- pyspark - 基于列存储索引创建新数据框
- javascript - 将 ViewBag 更改为 Json 数组以在 .net MVC 中绘制条形图
- c - 使用指针分配值/仅正常分配之间的区别?
- python - 如何加快我的 3D 欧几里得距离矩阵代码
- html - 无法将锚标记放在 HTML 代码标记内
- xamarin - 我有一个 Xamarin 形式的 MultiTrigger,对于一个按钮,它不起作用