回答:
あなたが説明している概念は「絶対値」と呼ばれ、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);
}
値を否定する方法は2つあります。
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;
、を使用できます。これは、3 項演算子(? :
)を使用して、ロジック(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;
}
関連するコードが再び必要になる可能性によっては、それらを独自の「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));
}
どうして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 funなし:
value = (value*value)/value
(上記は実際には機能しません。)
lib fun:
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
これを試して頂けますか?
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?-数値:数値);
または
if(number <0)number = -number;
これは、コードでバグの検索を実行するとバグになり、RV_NEGATING_RESULT_OFとして報告されます