Когда вам нужно представить значение без понятия потери или отсутствия (отрицательное значение), это называется «абсолютным значением».
Логика , чтобы получить абсолютное значение очень просто: "If it's positive, maintain it. If it's negative, negate it"
.
Это означает, что ваша логика и код должны работать следующим образом:
//If value is negative...
if ( value < 0 ) {
//...negate it (make it a negative negative-value, thus a positive value).
value = negate(value);
}
Есть два способа отменить значение:
- Ну, отрицая это значение:
value = (-value);
- Умножив его на «100% отрицательный» или «-1»:
value = value *
(-1);
Обе они на самом деле две стороны одной медали. Просто ты обычно не помнишь, что value = (-value);
на самом деле value = 1 * (-value);
.
Что касается того, как вы на самом деле делаете это в Java, это очень просто, потому что Java уже предоставляет функцию для этого в Math class
:value = Math.abs(value);
Да, без этого Math.abs()
- просто строка кода с очень простой математикой, но зачем делать ваш код уродливым? Просто используйте Math.abs()
функцию Java ! Они предоставляют это по причине!
Если вам абсолютно необходимо пропустить функцию, вы можете использовать ее value = (value < 0) ? (-value) : value;
, которая является просто более компактной версией кода, который я упомянул в разделе логики (3-й), с использованием оператора Ternary ( ? :
) .
Кроме того, могут быть ситуации, когда вы хотите всегда представлять потерю или отсутствие в функции, которая может принимать как положительные, так и отрицательные значения.
Вместо сложной проверки вы можете просто получить абсолютное значение и опровергнуть его: negativeValue = (-Math.abs(value));
Имея это в виду и рассматривая случай с суммой нескольких чисел, таких как ваше, было бы неплохо реализовать функцию:
int getSumOfAllAbsolutes(int[] values){
int total = 0;
for(int i=0; i<values.lenght; i++){
total += Math.abs(values[i]);
}
return total;
}
В зависимости от вероятности, что вам может понадобиться снова связанный код, также может быть хорошей идеей добавить их в вашу собственную библиотеку «utils», сначала разделить такие функции на их основные компоненты и поддерживать конечную функцию просто как гнездо вызовов для разделенные функции основных компонентов:
int[] makeAllAbsolute(int[] values){
//@TIP: You can also make a reference-based version of this function, so that allocating 'absolutes[]' is not needed, thus optimizing.
int[] absolutes = values.clone();
for(int i=0; i<values.lenght; i++){
absolutes[i] = Math.abs(values[i]);
}
return absolutes;
}
int getSumOfAllValues(int[] values){
int total = 0;
for(int i=0; i<values.lenght; i++){
total += values[i];
}
return total;
}
int getSumOfAllAbsolutes(int[] values){
return getSumOfAllValues(makeAllAbsolute(values));
}