Ketika Anda perlu merepresentasikan nilai tanpa konsep kerugian atau ketidakhadiran (nilai negatif), itu disebut "nilai absolut".
Logika untuk mendapatkan nilai absolut sangat sederhana: "If it's positive, maintain it. If it's negative, negate it"
.
Artinya, logika dan kode Anda harus berfungsi seperti berikut:
//If value is negative...
if ( value < 0 ) {
//...negate it (make it a negative negative-value, thus a positive value).
value = negate(value);
}
Ada 2 cara Anda dapat meniadakan nilai:
- Dengan, meniadakan nilainya:
value = (-value);
- Dengan mengalikannya dengan "100% negatif", atau "-1":
value = value *
(-1);
Keduanya sebenarnya adalah dua sisi dari koin yang sama. Hanya saja biasanya Anda tidak ingat itu value = (-value);
sebenarnya value = 1 * (-value);
.
Nah, seperti bagaimana Anda benar-benar melakukannya di Jawa, itu sangat sederhana, karena Java sudah menyediakan fungsi untuk itu, di Math class
:value = Math.abs(value);
Ya, melakukannya tanpa Math.abs()
hanya sebaris kode dengan matematika yang sangat sederhana, tetapi mengapa membuat kode Anda terlihat jelek? Cukup gunakan Math.abs()
fungsi yang disediakan Java ! Mereka menyediakannya karena suatu alasan!
Jika Anda benar-benar perlu melewati fungsi tersebut, Anda dapat menggunakan value = (value < 0) ? (-value) : value;
, yang merupakan versi kode yang lebih ringkas yang saya sebutkan di bagian logika (3), menggunakan operator Ternary ( ? :
) .
Selain itu, mungkin ada situasi di mana Anda ingin selalu mewakili kehilangan atau ketidakhadiran dalam suatu fungsi yang mungkin menerima nilai positif dan negatif.
Alih-alih melakukan beberapa pemeriksaan yang rumit, Anda bisa mendapatkan nilai absolut, dan meniadakannya: negativeValue = (-Math.abs(value));
Dengan mengingat hal itu, dan mempertimbangkan sebuah kasus dengan jumlah beberapa angka seperti milik Anda, merupakan ide bagus untuk mengimplementasikan suatu fungsi:
int getSumOfAllAbsolutes(int[] values){
int total = 0;
for(int i=0; i<values.lenght; i++){
total += Math.abs(values[i]);
}
return total;
}
Bergantung pada probabilitas Anda mungkin memerlukan kode terkait lagi, mungkin juga merupakan ide bagus untuk menambahkannya ke pustaka "utils" Anda sendiri, memisahkan fungsi-fungsi tersebut ke dalam komponen inti mereka terlebih dahulu, dan mempertahankan fungsi terakhir hanya sebagai sarang panggilan ke fungsi split-core dari komponen inti:
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));
}