Выполните последовательные проверки - PullRequest
0 голосов
/ 30 октября 2019

Я должен выполнить логику, если число в x раз больше другого числа.

// The distance between two candles
var distance = Math.Abs(firstAggregationUpperValue - currentCandleUpperValue);

// How many times is the distance bigger than firstAggregationDifference
var times = distance / firstAggregationDifference;

Я должен выполнить следующие проверки для times:

  • 7или выше и ниже 9 (раз> = 7 && раз <9) </li>
  • 9 или выше и ниже 12 (раз> = 9 && раз <12) </li>
  • 12 или выше и ниже 16 (времена> = 12 && времена <16) </li>
  • и т. д.

Если предположить, что время начинается в 3 раза больше, последовательность: 4 -> 2 -> 3.

  • 3 + 4 = 7 (раз> = 7 && раз <9) </li>

Обратите внимание, что 4 там. Следующим является + 2.

  • 7 + 2 = 9 (раз> = 9 && раз <12) </li>

Обратите внимание, что 2. Следующим является + 3.

  • 9 + 3 = 12 (раз> = 12 && раз <16) </li>

Примечание 3 там. Следующий снова: + 4.

  • 12 + 4 = 16 (раз> = 16 && раз <18) </li>
  • и т. Д.

Какой лучший способ сделать это? Я просто не хочу жестко кодировать 7, 9, 12, 16, 18 и т. Д.

1 Ответ

2 голосов
/ 30 октября 2019

Это рабочий раствор с использованием циклов.

int n = 3;

for (int j = 0; j < 10; j++)
{
    for (int i = 0; i < parameters.Length; i++)
    {
        var nextParameter = parameters[(i + 1) % parameters.Length];
        var firstPart = n + parameters[i];
        var secondPart = n + parameters[i] + nextParameter;

        if (times >= firstPart)
        {
            Console.WriteLine($"times >= {firstPart} (&& times < {secondPart}) ({n} + {parameters[i]})");
        }

        n += parameters[i];
    }
}

Вывод:

if times == 44 =>

times >= 7 (&& times < 9) (3 + 4)
times >= 9 (&& times < 12) (7 + 2)
times >= 12 (&& times < 16) (9 + 3)
times >= 16 (&& times < 18) (12 + 4)
times >= 18 (&& times < 21) (16 + 2)
times >= 21 (&& times < 25) (18 + 3)
times >= 25 (&& times < 27) (21 + 4)
times >= 27 (&& times < 30) (25 + 2)
times >= 30 (&& times < 34) (27 + 3)
times >= 34 (&& times < 36) (30 + 4)
times >= 36 (&& times < 39) (34 + 2)
times >= 39 (&& times < 43) (36 + 3)
times >= 43 (&& times < 45) (39 + 4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...