首页 > 解决方案 > 刚开始学习 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 更新后也更新了变量,但结果仍然相同。答案总是低几个数字。

标签: c#

解决方案


好的,让我们“调试”您的代码以查看发生了什么。

我们从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)
}

推荐阅读