Kayıp veya yokluk (negatif değer) kavramı olmadan bir değeri temsil etmeniz gerektiğinde, buna "mutlak değer" denir.
Mutlak değer elde etmek mantık çok basit: "If it's positive, maintain it. If it's negative, negate it"
.
Bunun anlamı, mantığınızın ve kodunuzun aşağıdaki gibi çalışması gerektiğidir:
if ( value < 0 ) {
value = negate(value);
}
Bir değeri reddetmenin 2 yolu vardır:
- Şey, değerini yadsıyarak:
value = (-value);
- "% 100 negatif" veya "-1" ile çarparak:
value = value *
(-1);
Her ikisi de aslında aynı madalyonun iki yüzüdür. Sadece bunun value = (-value);
aslında aslında olduğunu genellikle hatırlamazsınız value = 1 * (-value);
.
Peki, Java'da bunu gerçekte nasıl yaptığınıza gelince, çok basit, çünkü Java zaten bunun için bir işlev sağlıyor Math class
:value = Math.abs(value);
Evet, bunu olmadan Math.abs()
yapmak çok basit matematik içeren bir kod satırıdır, ama neden kodunuzu çirkin gösteriyorsunuz? Sadece Java'nın sağladığı Math.abs()
işlevi kullanın ! Bunu bir sebeple sağlıyorlar!
Fonksiyonu kesinlikle atlamanız gerekiyorsa value = (value < 0) ? (-value) : value;
, Ternary operatörünü ( ? :
) kullanarak mantık (3.) bölümünde bahsettiğim kodun basitçe daha kompakt bir versiyonu olan kullanabilirsiniz .
Ek olarak, hem pozitif hem de negatif değerler alabilecek bir işlevde her zaman kaybı veya yokluğu temsil etmek istediğiniz durumlar olabilir.
Karmaşık bir kontrol yapmak yerine, sadece mutlak değeri elde edebilir ve reddedebilirsiniz: negativeValue = (-Math.abs(value));
Bunu akılda tutarak ve sizinki gibi birden çok sayının toplamı olan bir durumu göz önünde bulundurarak, bir işlevi uygulamak iyi bir fikir olacaktır:
int getSumOfAllAbsolutes(int[] values){
int total = 0;
for(int i=0; i<values.lenght; i++){
total += Math.abs(values[i]);
}
return total;
}
İlgili koda tekrar ihtiyaç duyma olasılığınıza bağlı olarak, bunları kendi "utils" kitaplığınıza eklemek, bu tür işlevleri önce çekirdek bileşenlerine ayırmak ve son işlevi yalnızca çağrıların yuvası olarak sürdürmek iyi bir fikir olabilir. çekirdek bileşenlerin artık bölünmüş işlevleri:
int[] makeAllAbsolute(int[] values){
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));
}