Можете ли вы помочь мне улучшить это? - PullRequest
0 голосов
/ 19 марта 2019

Я хочу улучшить эту часть кода, я думал об использовании для:

        if((0 < NumberOfSensor) && (NumberOfSensor< 9))MaxPageNumber = 1;
        if((8 < NumberOfSensor) && (NumberOfSensor< 17))MaxPageNumber = 2;
        if((16 < NumberOfSensor) && (NumberOfSensor< 25))MaxPageNumber = 3;
        if((24 < NumberOfSensor) && (NumberOfSensor< 33))MaxPageNumber = 4;
        if((32 < NumberOfSensor) && (NumberOfSensor< 41))MaxPageNumber = 5;
        if((40 < NumberOfSensor) && (NumberOfSensor< 49))MaxPageNumber = 6;
        if((48 < NumberOfSensor) && (NumberOfSensor< 57))MaxPageNumber = 7;
        if((56 < NumberOfSensor) && (NumberOfSensor< 65))MaxPageNumber = 8;

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Вы не указали типы данных ваших переменных, но, исходя из контекста, я предполагаю, что они имеют целочисленный тип. Поскольку все ваши проверки целочисленных интервалов имеют одинаковую «ширину», вы можете заменить несколько проверок диапазона вычислением и одним условным:

if (NumberOfSensor > 0 && NumberOfSensor < 65)
    MaxPageNumber = (NumberOfSensor + 7) / 8;

Опять же, это предполагает, что переменные имеют целочисленный тип. В C, когда речь идет строго о целочисленной арифметике и присваивании, целочисленное деление получает floor результата, поэтому, например, 9/8 приводит к 1.

Ваш код не изменяется MaxPageNumber, если NumberOfSensor равен <= 0 или> 64. Таким образом, условие if все еще необходимо, если вы хотите, чтобы код вел себя точно так же, как и оригинал.

Обратите внимание, что приведенный выше расчет имеет тот же результат, что и расчет, опубликованный в другом ответе. Любой из них подойдет.

0 голосов
/ 19 марта 2019

Полагаю, NumberOfSensor - это целое число от 1 до 64. Если это так, то вы можете просто использовать:

MaxPageNumber = ((NumberOfSensor-1) / 8) + 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...