У мене є метод Java, в якому я підсумовую набір чисел. Однак я хочу, щоб будь-які цифри негативу трактувалися як позитивні. Отже (1) + (2) + (1) + (- 1) має дорівнювати 5.
Я впевнений, що це дуже легко зробити - я просто не знаю як.
У мене є метод Java, в якому я підсумовую набір чисел. Однак я хочу, щоб будь-які цифри негативу трактувалися як позитивні. Отже (1) + (2) + (1) + (- 1) має дорівнювати 5.
Я впевнений, що це дуже легко зробити - я просто не знаю як.
Відповіді:
Концепція, яку ви описуєте, називається "абсолютне значення", а Java має функцію Math.abs, щоб зробити це за вас. Або ви могли уникнути виклику функції та зробити це самостійно:
number = (number < 0 ? -number : number);
або
if (number < 0)
number = -number;
Ти шукаєш абсолютної цінності, приятель. Math.abs(-5)
повертає 5 ...
Цей код не безпечно називати позитивними цифрами.
int x = -20
int y = x + (2*(-1*x));
// Therefore y = -20 + (40) = 20
Спробуйте це (мінус перед x є дійсним, оскільки він є одинарним оператором, більше знайдіть тут ):
int answer = -x;
За допомогою цього ви можете перетворити позитив на негатив і негатив на позитив.
Однак якщо ви хочете зробити лише від’ємне число додатним, спробуйте це:
int answer = Math.abs(x);
АБО , якщо ви хочете чомусь не використовувати метод abs (), спробуйте це:
int answer = Math.sqrt(Math.pow(x, 2));
Сподіваюся, це допомагає! Щасти!
Ви хочете обгорнути кожне число Math.abs()
. напр
System.out.println(Math.abs(-1));
роздруковує "1".
Якщо ви хочете уникати написання Math.
частини, ви можете статично включити утиліту Math. Просто напишіть
import static java.lang.Math.abs;
разом з вашим імпортом, і ви можете посилатися на функцію abs()
лише написавши
System.out.println(abs(-1));
Найпростіший, якщо багатослівний спосіб зробити це - загортати кожен номер у виклик Math.abs (), тож ви додасте:
Math.abs(1) + Math.abs(2) + Math.abs(1) + Math.abs(-1)
з логічними змінами для відображення структури вашого коду. Багатослівний, можливо, але це робить те, що ти хочеш.
-
знак (и)? Або в іншому випадку, у тому числі, якщо він не має контролю, чи не було б краще використовувати таку функцію, як absoluteSum( int[] values ){ /*loop with Math.abs()*/ }
замість ручного загортання Math.abs () у кожне значення? [-1]
Коли вам потрібно представити значення без поняття втрати чи відсутності (від'ємне значення), це називається "абсолютне значення".
Логіка , щоб отримати абсолютне значення дуже просто: "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);
}
Існує 2 способи заперечення значення:
value = (-value);
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;
}
Залежно від ймовірності, що вам знову може знадобитися пов’язаний код, може бути також хорошою ідеєю додати їх до власної бібліотеки "утиліти", розбивши спочатку такі функції на їх основні компоненти та підтримуючи остаточну функцію просто як гніздо викликів до Тепер розбиті функції основних компонентів:
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));
}
Чому ти не підеш multiply that number with -1
?
Подобається це:
//Given x as the number, if x is less than 0, return 0 - x, otherwise return x:
return (x <= 0.0F) ? 0.0F - x : x;
Якщо вас цікавить механіка доповнення двох, ось це абсолютно неефективний, але показовий спосіб низького рівня:
private static int makeAbsolute(int number){
if(number >=0){
return number;
} else{
return (~number)+1;
}
}
Я рекомендую наступні рішення:
без веселощів:
value = (value*value)/value
(Наведене фактично не працює.)
з веселощами:
value = Math.abs(value);
Функція бібліотеки Math.abs()
може бути використана.
Math.abs()
повертає абсолютне значення аргументу
- якщо аргумент негативний, він повертає заперечення аргументу.
- якщо аргумент позитивний, він повертає число таким, яким воно є.
наприклад:
int x=-5;
System.out.println(Math.abs(x));
Вихід: 5
int y=6;
System.out.println(Math.abs(y));
Вихід: 6
Для перетворення від'ємного числа в додатне число (це називається абсолютним значенням) використовується Math.abs (). Цей метод Math.abs () працює так
“number = (number < 0 ? -number : number);".
Наведений нижче приклад Math.abs(-1)
перетворить негативне число 1 у позитивне 1.
приклад
public static void main (String [] args) {
int total = 1 + 1 + 1 + 1 + (-1);
//output 3
System.out.println("Total : " + total);
int total2 = 1 + 1 + 1 + 1 + Math.abs(-1);
//output 5
System.out.println("Total 2 (absolute value) : " + total2);
}
Вихідні дані
Всього: 3 Всього 2 (абсолютна величина): 5
Мені потрібне було абсолютне значення довго, і я заглянув глибоко в Math.abs і виявив, що якщо мій аргумент менший за LONG.MIN_VAL, який становить -9223372036854775808l, то функція abs не поверне абсолютне значення, а лише мінімальне значення. У цьому випадку, якщо ваш код надалі використовує це значення abs, може виникнути проблема.
Чи можете ви спробуйте це?
public static int toPositive(int number) {
return number & 0x7fffffff;
}
У kotlin ви можете використовувати unaryPlus
input = input.unaryPlus()
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/unary-plus.html
не роби цього
число = (число <0? -кілька: число);
або
якщо (число <0) число = -число;
це буде помилка, коли ви запустите find bug на своєму коді, він повідомить про це як RV_NEGATING_RESULT_OF