숫자 집합을 합산하는 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;
이 코드는 양수로 호출 해도 안전 하지 않습니다 .
int x = -20
int y = x + (2*(-1*x));
// Therefore y = -20 + (40) = 20
가장 쉬운 방법은 자세한 방법은 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);
}
값을 부정 할 수있는 두 가지 방법이 있습니다.
value = (-value);
value = value *
(-1);
둘 다 실제로 같은 동전의 양면입니다. value = (-value);
실제로는 실제로 기억하지 않는다는 것 value = 1 * (-value);
입니다.
Java에서 실제로 어떻게하는지에 관해서는 Java가 이미 다음과 같은 기능을 제공하기 때문에 매우 간단합니다 Math class
.value = Math.abs(value);
그렇습니다.없이 Math.abs()
간단한 작업을 수행하는 것은 매우 간단한 수학 코드 일 뿐이지 만 왜 코드가보기에 좋지 않습니까? Java에서 제공하는 Math.abs()
기능을 사용하십시오! 그들은 이유를 제공합니다!
함수를 건너 뛸 필요가 value = (value < 0) ? (-value) : value;
있는 경우을? :
사용할 수 있습니다 .Terary 연산자 ( )를 사용하여 논리 (3) 섹션에서 언급 한보 다 간단한 코드 입니다.
또한 양수 값과 음수 값을 모두받을 수있는 함수 내에서 항상 손실 또는 부재를 나타내려는 상황이있을 수 있습니다.
복잡한 검사를 수행하는 대신 절대 값을 가져 와서 무시할 수 있습니다. 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;
다음 솔루션을 권장합니다.
lib 재미없이 :
value = (value*value)/value
(위의 내용은 실제로 작동하지 않습니다.)
lib 재미와 함께 :
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로 변환합니다.
예
공개 정적 무효 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
long의 절대 값이 필요했고 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