170

一連の数値を合計するJavaメソッドがあります。ただし、負の数はすべて正として扱われるようにします。したがって、(1)+(2)+(1)+(-1)は5に等しくなります。

これを行うには非常に簡単な方法があると確信しています-方法がわかりません。

4

23 に答える 23

422

Math.absを呼び出すだけです。例えば:

int x = Math.abs(-5);

に設定さx5ます。

を渡すと、の範囲では正の等価物を表すことができないためInteger.MIN_VALUE、同じ値(まだ負の値)が返されることに注意してください。int

于 2009-01-29T21:25:02.267 に答える
108

あなたが説明している概念は「絶対値」と呼ばれ、Javaにはそれを行うMath.absという関数があります。または、関数呼び出しを回避して自分で行うこともできます。

number = (number < 0 ? -number : number);

また

if (number < 0)
    number = -number;
于 2009-01-29T21:25:17.460 に答える
21

あなたは絶対的な価値を探しています、相棒。Math.abs(-5)5 を返します...

于 2009-01-29T21:25:43.560 に答える
12

abs関数を使用します。

int sum=0;
for(Integer i : container)
  sum+=Math.abs(i);
于 2009-01-29T21:25:23.560 に答える
8

このコードは、正の数で呼び出すのは安全ではありません。

int x = -20
int y = x + (2*(-1*x));
// Therefore y = -20 + (40) = 20
于 2011-03-07T14:02:41.890 に答える
6

絶対値について質問していますか?

Math.abs(...)はおそらく必要な関数です。

于 2009-01-29T21:25:14.263 に答える
6

各数値を にラップし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));
于 2009-01-29T21:25:44.747 に答える
5

これを行うための最も簡単な方法は、各数値を Math.abs() 呼び出しでラップすることです。したがって、次のように追加します。

Math.abs(1) + Math.abs(2) + Math.abs(1) + Math.abs(-1)

コードの構造を反映するようにロジックを変更します。おそらく冗長ですが、それはあなたが望むことをします。

于 2009-01-29T21:25:41.003 に答える
5

欠損や不在の概念を持たない値(負の値)を表す必要がある場合、それを「絶対値」と呼びます。


絶対値を取得するロジックは非常に単純です"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 つあります。

  1. まあ、その価値を否定することによって:value = (-value);
  2. これに「100% マイナス」または「-1」を掛けると、次のようになります。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 番目) セクションで説明したコードの単純なバージョンであり、三項演算子 ( ? :)を使用しています。


さらに、正と負の両方の値を受け取る可能性がある関数内で、損失または不在を常に表現したい場合があります。

複雑なチェックを行う代わりに、単純に絶対値を取得して否定できます。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));
}
于 2013-09-11T15:25:12.287 に答える
4

どうして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;
于 2012-02-22T12:14:14.640 に答える
2

2 の補数の仕組みに興味がある場合は、これを行うための完全に非効率的ですが、低レベルの方法を説明します。

private static int makeAbsolute(int number){
     if(number >=0){
        return number;
     } else{
        return (~number)+1;
     }
}
于 2011-11-16T18:20:59.210 に答える
1

次の解決策をお勧めします。

ライブラリの楽しみなし:

    value = (value*value)/value

(上記は実際には動作しません。)

ライブラリの楽しみで:

   value = Math.abs(value);
于 2014-01-04T09:31:57.157 に答える
1
String s = "-1139627840";
BigInteger bg1 = new BigInteger(s);
System.out.println(bg1.abs());

または:

int i = -123;
System.out.println(Math.abs(i));
于 2011-03-16T15:24:58.407 に答える
0

long の絶対値が必要で、Math.abs を詳しく調べたところ、引数が LONG.MIN_VAL (-9223372036854775808l) より小さい場合、abs 関数は絶対値ではなく最小値のみを返すことがわかりました。この場合、コードでこの abs 値をさらに使用すると、問題が発生する可能性があります。

于 2011-02-24T16:53:04.583 に答える
-3

これをしないでください

数値 = (数値 < 0 ? -数値 : 数値);

また

if (number < 0) number = -number;

コードで find bug を実行すると、これはバグであり、RV_NEGATING_RESULT_OF として報告されます。

于 2013-11-05T19:08:04.977 に答える