J'ai une méthode Java dans laquelle je fais la somme d'un ensemble de nombres. Cependant, je veux que tous les nombres négatifs soient traités comme des positifs. Donc (1) + (2) + (1) + (- 1) devrait être égal à 5.
Je suis sûr qu'il y a un moyen très facile de faire cela - je ne sais pas comment.
Le concept que vous décrivez s'appelle "valeur absolue" et Java a une fonction appelée Math.abs pour le faire à votre place. Ou vous pouvez éviter l'appel de fonction et le faire vous-même:
number = (number < 0 ? -number : number);
ou
if (number < 0)
number = -number;
Vous recherchez une valeur absolue, mec. Math.abs(-5)
renvoie 5 ...
Utilisez la fonction abs
:
int sum=0;
for(Integer i : container)
sum+=Math.abs(i);
Ce code est non sûr d'être appelé sur des nombres positifs.
int x = -20
int y = x + (2*(-1*x));
// Therefore y = -20 + (40) = 20
Vous parlez de valeurs absolues?
Math.abs (...) est la fonction que vous voulez probablement.
Vous souhaitez insérer chaque numéro dans Math.abs()
. par exemple.
System.out.println(Math.abs(-1));
affiche "1".
Si vous voulez éviter d'écrire la partie Math.
-, vous pouvez inclure Math util de manière statique. Ecrivez
import static Java.lang.Math.abs;
avec vos importations, et vous pouvez vous référer à la fonction abs()
- simplement en écrivant
System.out.println(abs(-1));
Essayez ceci (le négatif devant le x est valide puisqu'il s'agit d'un opérateur unaire, trouvez-en plus ici ):
int answer = -x;
Avec cela, vous pouvez transformer un positif en négatif et un négatif en positif.
Cependant , si vous voulez seulement rendre un nombre négatif positif, essayez ceci:
int answer = Math.abs(x);
OU, si vous préférez ne pas utiliser la méthode abs () pour une raison quelconque, essayez ceci:
int answer = Math.sqrt(Math.pow(x, 2));
J'espère que ça aide! Bonne chance!
Lorsque vous devez représenter une valeur sans le concept de perte ou d'absence (valeur négative), on parle de "valeur absolue".
La logique pour obtenir la valeur absolue est très simple: "If it's positive, maintain it. If it's negative, negate it"
.
Cela signifie que votre logique et votre code devraient fonctionner comme suit:
//If value is negative...
if ( value < 0 ) {
//...negate it (make it a negative negative-value, thus a positive value).
value = negate(value);
}
Il y a 2 façons de nier une valeur:
value = (-value);
value = value * (-1);
Les deux sont en réalité les deux faces d'une même pièce. C'est juste que vous ne vous souvenez généralement pas que value = (-value);
est en fait value = 1 * (-value);
.
Eh bien, pour ce qui est de la façon dont vous le faites réellement en Java, c'est très simple, car Java fournit déjà une fonction pour cela, dans le Math class
: value = Math.abs(value);
Oui, le faire sans Math.abs()
n'est qu'une ligne de code avec des calculs très simples, mais pourquoi donner à votre code une apparence laide? Il suffit d'utiliser la fonction Math.abs()
fournie par Java! Ils le fournissent pour une raison!
Si vous devez absolument ignorer la fonction, vous pouvez utiliser value = (value < 0) ? (-value) : value;
, qui est simplement une version plus compacte du code que j'ai mentionné dans la section logique (3ème), à l'aide de l'opérateur Ternary (? :
) .
En outre, il peut arriver que vous souhaitiez toujours représenter une perte ou une absence dans une fonction pouvant recevoir à la fois des valeurs positives et négatives.
Au lieu de faire une vérification compliquée, vous pouvez simplement obtenir la valeur absolue et l’annuler: negativeValue = (-Math.abs(value));
Dans cet esprit, et si l’on considère un cas avec une somme de plusieurs nombres comme le vôtre, ce serait une bonne idée de mettre en oeuvre une fonction:
int getSumOfAllAbsolutes(int[] values){
int total = 0;
for(int i=0; i<values.lenght; i++){
total += Math.abs(values[i]);
}
return total;
}
En fonction de la probabilité que vous ayez à nouveau besoin de code associé, il peut également être judicieux de les ajouter à votre propre bibliothèque "utils", en séparant ces fonctions en leurs composants principaux et en maintenant la fonction finale simplement comme un nid d'appels à fonctions maintenant divisées des composants de base:
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));
}
Le moyen le plus simple de procéder consiste à envelopper chaque nombre dans un appel Math.abs () de manière à ajouter:
Math.abs(1) + Math.abs(2) + Math.abs(1) + Math.abs(-1)
avec des changements de logique pour refléter la structure de votre code. Verbose, peut-être, mais il fait ce que vous voulez.
Pourquoi ne pas multiply that number with -1
?
Comme ça:
_//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;
_
Je recommanderais les solutions suivantes:
sans lib fun:
value = (value*value)/value
avec lib fun:
value = Math.abs(value);
String s = "-1139627840";
BigInteger bg1 = new BigInteger(s);
System.out.println(bg1.abs());
Alternativement:
int i = -123;
System.out.println(Math.abs(i));
La fonction de bibliothèque Math.abs()
peut être utilisée.Math.abs()
renvoie la valeur absolue de l'argument
- si l'argument est négatif, il retourne la négation de l'argument.
- si l'argument est positif, il retourne le nombre tel quel.
par exemple:
int x=-5;
System.out.println(Math.abs(x));
Sortie: 5
int y=6;
System.out.println(Math.abs(y));
Sortie: 6
Si vous vous intéressez aux mécanismes du complément à deux, voici comment procéder de manière peu efficace, mais illustrative:
private static int makeAbsolute(int number){
if(number >=0){
return number;
} else{
return (~number)+1;
}
}
J'avais besoin de la valeur absolue d'un long, et j'ai examiné profondément Math.abs et découvert que si mon argument est inférieur à LONG.MIN_VAL, qui est -9223372036854775808l, la fonction abs ne renverra pas une valeur absolue mais uniquement la valeur minimale. Dans ce cas, si votre code utilise cette valeur abs plus loin, il pourrait y avoir un problème.