一連の数値を合計するJavaメソッドがあります。ただし、負の数はすべて正として扱われます。 (1)+(2)+(1)+(-1)は5に等しくなければなりません。
これを行う非常に簡単な方法があると確信しています-方法がわかりません。
説明する概念は「絶対値」と呼ばれ、Javaには Math.abs と呼ばれる機能があります。または、関数呼び出しを避けて自分で行うこともできます。
number = (number < 0 ? -number : number);
または
if (number < 0)
number = -number;
あなたは絶対的な価値を探しています。 Math.abs(-5)
は5を返します...
abs
関数を使用します。
int sum=0;
for(Integer i : container)
sum+=Math.abs(i);
このコードはnotで、正の数で呼び出されても安全です。
int x = -20
int y = x + (2*(-1*x));
// Therefore y = -20 + (40) = 20
絶対値について尋ねていますか?
Math.abs(...)はおそらく必要な関数です。
各数値をMath.abs()
にラップする必要があります。例えば.
System.out.println(Math.abs(-1));
「1」を出力します。
Math.
- partの記述を避けたい場合は、Mathユーティリティを静的に含めることができます。書くだけ
import static Java.lang.Math.abs;
インポートとともに、次のように記述するだけでabs()
- functionを参照できます。
System.out.println(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()
なしでそれを行うことは、非常に単純な数学を使用した単なるコード行ですが、なぜコードがcodeいように見えるのですか? Javaが提供するMath.abs()
関数を使用するだけです!彼らには理由があります!
関数を絶対にスキップする必要がある場合は、value = (value < 0) ? (-value) : value;
を使用できます。これは、 三項演算子(? :
) を使用して、ロジック(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));
}
これを行う最も簡単で冗長な方法は、Math.abs()呼び出しで各数値をラップすることです。したがって、以下を追加します。
Math.abs(1) + Math.abs(2) + Math.abs(1) + Math.abs(-1)
コードの構造を反映するためにロジックが変更されます。おそらく、詳細ですが、それはあなたが望むことをします。
これを試してください(xの前の否定は単項演算子であるため有効です。さらに詳しく here を見つけてください):
int answer = -x;
これにより、ポジティブをネガティブに、ネガティブをポジティブに変えることができます。
ただし、、負の数のみを正にしたい場合は、これを試してください:
int answer = Math.abs(x);
または、何らかの理由でabs()メソッドを使用したくない場合は、これを試してください:
int answer = Math.sqrt(Math.pow(x, 2));
それが役に立てば幸い!がんばろう!
なぜ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
with lib fun:
value = Math.abs(value);
String s = "-1139627840";
BigInteger bg1 = new BigInteger(s);
System.out.println(bg1.abs());
代わりに:
int i = -123;
System.out.println(Math.abs(i));
ライブラリ関数Math.abs()
を使用できます。Math.abs()
は引数の絶対値を返します
- 引数が負の場合、引数の否定を返します。
- 引数が正の場合、数値をそのまま返します。
例えば:
int x=-5;
System.out.println(Math.abs(x));
出力:5
int y=6;
System.out.println(Math.abs(y));
出力:6
2の補数の仕組みに興味がある場合、これは絶対に非効率的ですが、これを説明する低レベルの方法です。
private static int makeAbsolute(int number){
if(number >=0){
return number;
} else{
return (~number)+1;
}
}
Longの絶対値が必要で、Math.absを詳しく調べて、引数が-9223372036854775808lのLONG.MIN_VALより小さい場合、abs関数は絶対値ではなく最小値のみを返すことがわかりました。この場合、コードがこのabs値をさらに使用している場合、問題がある可能性があります。