Функция не реагирует на счетчик в цикле while - PullRequest
0 голосов
/ 04 февраля 2019

Итак, я сделал петлю 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++;
    }

}

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Код

    Console.ReadLine();
    double totalSumOfGrades = 0;

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

будет проще и более прямым.

0 голосов
/ 04 февраля 2019

Как сказал @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++;
            }

        }

Я добавил ключевые слова ref для currentGrade и totalSumOfGrades как в вызове, так и в объявлении, чтобы переменныедолжным образом обновленный, который, я считаю, является наиболее эффективным способом заставить код работать.

...