sc delete sericeName
Просто удостоверяются, что сервис останавливается прежде, чем сделать это. Я видел эту работу большинство раз. Существуют времена, где я видел, что окна застревают на чем-то, и это настаивает на перезагрузке.
Статический класс не имеет состояния. Он все еще может иметь переменные, которые, хотя и являются статическими, но имеют состояние.
Статический класс без каких-либо переменных уровня класса не имеет состояния. Он не содержит данных.
но я объясню это . Из градусов% 360
вы получите число от -359
до 359
. Добавление 360
изменит диапазон от 1
до 719
. Если ориентация
уже положительная, добавление этого гарантирует, что она все еще есть, а окончательный % 360
вернет его в диапазон от 0
до 359
.
Как минимум , вы можете упростить свой код, так как if
s и while
s могут быть объединены. Например, результат выполнения условий в этих двух строках:
if (this.orientation < 0)
while (this.orientation < 0)
всегда одинаков, поэтому вам не нужно окружение if
.
Итак, к этому конец, вы могли бы сделать:
public void Rotate (int degrees) {
this.orientation += degrees;
while (this.orientation < 0) this.orientation += 360;
while (this.orientation > 359) this.orientation -= 360;
}
но я ' d по-прежнему выбирают модульную версию, поскольку она позволяет избежать циклов. Это будет важно, когда пользователь введет 360 000 000 000 для ротации (и они сделают это , поверьте мне), а затем обнаружат, что им нужно пораньше пообедать, пока ваш код перемалывается:
Я как бы быстро смоделировал это в AS3, но должно работать (вам может понадобиться + =
для угла)
private Number clampAngle(Number angle)
{
return (angle % 360) + (angle < 0 ? 360 : 0);
}
Используйте арифметику по модулю:
this.orientation += degrees;
this.orientation = this.orientation % 360;
if (this.orientation < 0)
{
this.orientation += 360;
}
Это тот, который нормализует в любом диапазоне. Полезно для нормализации между [-180,180], [0,180] или [0,360].
(хотя и в C ++)
//Normalizes any number to an arbitrary range //by assuming the range wraps around when going below min or above max double normalise( const double value, const double start, const double end ) { const double width = end - start ; // const double offsetValue = value - start ; // value relative to 0 return ( offsetValue - ( floor( offsetValue / width ) * width ) ) + start ; // + start to reset back to start of original range }
для INTS
//Normalizes any number to an arbitrary range //by assuming the range wraps around when going below min or above max int normalise( const int value, const int start, const int end ) { const int width = end - start ; // const int offsetValue = value - start ; // value relative to 0 return ( offsetValue - ( ( offsetValue / width ) * width ) ) + start ; // + start to reset back to start of original range }
так в основном одинаково, но без пола. Версия, которую я лично использую, это универсальный, который работает для всех числовых типов, и он также использует переопределенный пол, который ничего не делает в случае интегральных типов.