【问题标题】:The function doesn't respond to the counter in while-loop该函数不响应while循环中的计数器
【发布时间】:2019-06-28 06:54:42
【问题描述】:

所以我做了一个while 循环,要达到 12 个等级。计数器从 0 开始。在Main() 方法中,我调用函数gradeFunction(),但在它执行后它不会对计数器进行任何更改。

Program p = new Program();
string name = Console.ReadLine();
int gradesPassed = 12;
int currentGrade = 0;
double totalSumOfGrades = 0;
while(currentGrade <= gradesPassed)
{
    double finalGrade = double.Parse(Console.ReadLine());
    p.gradeFunction(finalGrade, totalSumOfGrades,     currentGrade);
}

被调用函数:

public void gradeFunction(double finalGrade, double totalSumOfGrades, int currentGrade)
{
    if(finalGrade >= 4.00)
    {
       totalSumOfGrades += finalGrade;
       currentGrade++;
    }

}

【问题讨论】:

标签: c# function while-loop


【解决方案1】:

代码,

    Console.ReadLine();
    double totalSumOfGrades = 0;

    for(var currentGrade = 0; currentGrade <= 12; currentGrade++)
    {
        var finalGrade = double.Parse(Console.ReadLine());
        if (finalGrade >= 4.00)
        {
            totalSumOfGrades += finalGrade;
        }
    }

会更简单直接。

【讨论】:

    【解决方案2】:

    就像@Jeremy 说的,试试下面的:

    Program p = new Program();
    string name = Console.ReadLine();
    int gradesPassed = 12;
    int currentGrade = 0;
    double totalSumOfGrades = 0;
    while (currentGrade <= gradesPassed)
    {
        double finalGrade = double.Parse(Console.ReadLine());
        gradeFunction(finalGrade, ref totalSumOfGrades, ref currentGrade);
    }
    
    public static void gradeFunction(double finalGrade, ref double totalSumOfGrades, ref int currentGrade)
            {
                if (finalGrade >= 4.00)
                {
                    totalSumOfGrades += finalGrade;
                    currentGrade++;
                }
    
            }
    

    我在调用和声明中都添加了 currentGradetotalSumOfGrades 的 ref 关键字,以便正确更新变量,我认为这是让代码正常工作的最无影响的方式。

    【讨论】:

    • OP 好像没看懂,那你为什么不解释你做了什么改变才能让它工作呢?
    • 抱歉,我在调用和声明中为 currentGradetotalSumOfGrades 添加了 ref 关键字,以便正确更新变量,我认为这是最无影响的让代码工作的方法
    • 是的,我刚刚了解了它的工作方式,但它还需要在 finalGrade 前面加上 ref 关键字。谢谢
    • 如果您为原始 finalGrade 分配一个新值,那么可以,但是如果您只是传递我认为您当前代码正在执行的值,因为它会在循环的每次迭代中重新生成值,应该没有必要
    • 是的,事实证明没有必要
    猜你喜欢
    • 1970-01-01
    • 2016-04-02
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多