Как увеличить счет внутри каждого цикла в единстве? - PullRequest
0 голосов
/ 03 апреля 2019

Я использую цикл foreach для проверки ответов, введенных пользователем на заданные 5 вопросов умножения. (используя экземпляр для отображения 5 вопросов при запуске)

Теперь я пытаюсь добавить счетчик очков и увеличить его на 1, если ответ правильный, и в зависимости от результата я буду отображать звезды. Например, если счет меньше 3, то 1 звезда, если 4, то 2 звезды и если 5 тогда 3 звезды. Я получаю только одну звезду, даже если все ответы верны. Может кто-нибудь сказать мне, как этого добиться, пожалуйста?

Я попытался добавить счет ++ внутри оператора if. но это не увеличивает значение балла.

public void CheckButton() 
{
    int answer;

    foreach (TestModeQuestionUI _TestModeQuestionUIRefrence in testModeQuestionExampleList)
    {
        answer = _TestModeQuestionUIRefrence.GetAnswerInputField();

        if ((_TestModeQuestionUIRefrence.a * _TestModeQuestionUIRefrence.b) == answer)
        {
            _TestModeQuestionUIRefrence.SetResultOfAnswerInputField(1);
            score++;
        }
        else
        {
            _TestModeQuestionUIRefrence.SetResultOfAnswerInputField(2);
        }
    }

    roundCompletePanel.SetActive(true);
    CheckHowManyStars();

    ShowRoundCompletePanel(score);
}

1 Ответ

2 голосов
/ 03 апреля 2019

Просто предполагая, что

(_TestModeQuestionUIRefrence.a * _TestModeQuestionUIRefrence.b) == answer

- это все float значения. Никогда сравни float напрямую используя ==. Они могут никогда не быть равными, хотя по логике они должны. Они могут отличаться очень маленьким «эпсилоном» из-за точности с плавающей точкой .


Вместо этого используйте Mathf.Approximately, который использует именно этот маленький "эпсилон" для определения равенства.

if (Mathf.Approximately(_TestModeQuestionUIRefrence.a * _TestModeQuestionUIRefrence.b, answer))

Это похоже на

if (_TestModeQuestionUIRefrence.a * _TestModeQuestionUIRefrence.b - answer <= diferenceSmallEnoughThreshold)

, где differenceSmallEnoughThreshold будет определенным порогом, который будет использоваться для обеспечения действительности

...