Wenn Sie einen Wert ohne das Konzept eines Verlusts oder einer Abwesenheit (negativer Wert) darstellen müssen, wird dies als "absoluter Wert" bezeichnet.
Die Logik zum Erhalten des Absolutwerts ist sehr einfach : "If it's positive, maintain it. If it's negative, negate it"
.
Dies bedeutet, dass Ihre Logik und Ihr Code wie folgt funktionieren sollten:
//If value is negative...
if ( value < 0 ) {
//...negate it (make it a negative negative-value, thus a positive value).
value = negate(value);
}
Es gibt zwei Möglichkeiten, einen Wert zu negieren:
- Indem man seinen Wert negiert:
value = (-value);
- Durch Multiplikation mit "100% negativ" oder "-1":
value = value *
(-1);
Beide sind eigentlich zwei Seiten derselben Medaille. Es ist nur so, dass Sie sich normalerweise nicht daran erinnern, dass dies value = (-value);
tatsächlich der Fall ist value = 1 * (-value);
.
Nun, wie Sie es tatsächlich in Java machen, es ist sehr einfach, da Java bereits eine Funktion dafür bereitstellt Math class
:value = Math.abs(value);
Ja, es ohne Math.abs()
ist nur eine Codezeile mit sehr einfacher Mathematik, aber warum sollte Ihr Code hässlich aussehen? Verwenden Sie einfach die von Java bereitgestellte Math.abs()
Funktion! Sie bieten es aus einem Grund!
Wenn Sie die Funktion unbedingt überspringen müssen, können Sie value = (value < 0) ? (-value) : value;
mit dem ternären Operator ( ? :
) einfach eine kompaktere Version des Codes verwenden, den ich im Abschnitt Logik (3.) erwähnt habe .
Darüber hinaus kann es Situationen geben, in denen Sie Verlust oder Abwesenheit innerhalb einer Funktion immer darstellen möchten, die sowohl positive als auch negative Werte erhalten.
Anstatt eine komplizierte Prüfung durchzuführen, können Sie einfach den absoluten Wert abrufen und ihn negieren: negativeValue = (-Math.abs(value));
Vor diesem Hintergrund und in Anbetracht eines Falls mit einer Summe mehrerer Zahlen wie Ihrer wäre es eine gute Idee, eine Funktion zu implementieren:
int getSumOfAllAbsolutes(int[] values){
int total = 0;
for(int i=0; i<values.lenght; i++){
total += Math.abs(values[i]);
}
return total;
}
Abhängig von der Wahrscheinlichkeit, dass Sie erneut verwandten Code benötigen, ist es möglicherweise auch eine gute Idee, diese zu Ihrer eigenen "Utils" -Bibliothek hinzuzufügen, diese Funktionen zuerst in ihre Kernkomponenten aufzuteilen und die endgültige Funktion einfach als Nest von Aufrufen zu verwalten die jetzt geteilten Funktionen der Kernkomponenten:
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));
}