Member 13418406 Ответов: 3

А как же я?.. Сделать эту переменную менять условно с если еще


двойной avgToFinalLetterGrade, totalKnownGradeWeight, finalOverallScore;
finalOverallScore = 0;
если (desiredGrade == "а" || desiredGrade == "а") {
finalOverallScore = 90;}
остальное, если (desiredGrade == "Б" || desiredGrade == "б") {
finalOverallScore = 80; }
остальное, если (desiredGrade == "с" || desiredGrade == "с") {
finalOverallScore = 70;}
остальное, если (desiredGrade == "Д" || desiredGrade == "д") {
finalOverallScore = 60; }
остальное, если (desiredGrade == "Ф" ||desiredGrade == "Ф") {
finalOverallScore = 0; }

totalKnownGradeWeight = (weightExamOne + weightExamTwo + weightFinalExam + weightLabs + weightProjects + weightAttendance + weightquizz);
avgToFinalLetterGrade = ((100 * finalOverallScore) - ((weightExamOne * examOneScore) + (weightExamTwo * examTwoScore) +(weightFinalExam * examFinalScore) + (weightLabs * avgLabGrade) + (weightquizz * avgQuizGrade) + (weightProjects * avgProjectGrade) + (weightAttendance * avgAttendanceGrade))
/ (100 - (totalKnownGradeWeight)));

Что я уже пробовал:

всякий раз, когда я запускаю программу (до этого раздела было намного больше if else и пользовательского ввода), finalOverallScore не меняется условно с моим if else, а только входит как 0. я инициализировал его как ноль, так что у него был путь к выходу if else или переменная показывалась как неинициализированная... Что случилось?

3 Ответов

Рейтинг:
2

Patrice T

Это значит, что desiredGrade ценность-это не то, что вы думаете.
единственный способ узнать, что есть что, - это использовать отладчик, установить точку останова и проверить desiredGrade значение и длина.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]
Отладка кода C# в Visual Studio-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
1

OriginalGriff

Мы не можем сказать-слишком многое зависит от содержания ваших данных и от того, когда этот код действительно будет выполнен: и мы не можем контролировать это, и мы не можем проверить это здесь.

Так что все будет зависеть от вас.
Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас-вам пора освоить новый (и очень, очень полезный) навык: отладку!


Рейтинг:
1

phil.o

Я бы предпочел оператор switch, а не кучу операторов if...else.
Что-то вроде:

switch (desiredGrade.ToLower()) {
   case "a":
      finalOverallScore = 90;
      break;
   case "b":
      finalOverallScore = 80;
      break;
   case "c":
      finalOverallScore = 70;
      break;
   case "d":
      finalOverallScore = 60;
      break;
   case "e":
      finalOverallScore = 50;
      break;
   case "f":
      finalOverallScore = 0;
      break;
   default:
      throw new ArgumentException("Wrong grade", nameof(desiredGrade));
}


Что касается того, почему ваша переменная не получает правильного значения, вам придется поставить точку останова в первой строке метода и отладить, чтобы понять, почему. Может быть и так desiredGrade это не A, a, B,b, C, c, D, d, F и не f.

Примечание: Я добавил случай "Е", который вы, похоже, не приняли во внимание.
Примечание 2: преобразование значения в нижний регистр позволяет вам иметь меньше условий для тестирования.

Самое главное, чтобы понять здесь, что вы должны отлаживать ваш код должен понять, почему он ведет себя не так, как вы ожидаете.

Любезно.