Bir dizi sayıyı topladığım bir Java yöntemim var. Ancak, negatif sayıların pozitif olarak değerlendirilmesini istiyorum. Yani (1) + (2) + (1) + (- 1) 5'e eşit olmalıdır.
Eminim bunu yapmanın çok kolay bir yolu vardır - nasıl yapılacağını bilmiyorum.
Bir dizi sayıyı topladığım bir Java yöntemim var. Ancak, negatif sayıların pozitif olarak değerlendirilmesini istiyorum. Yani (1) + (2) + (1) + (- 1) 5'e eşit olmalıdır.
Eminim bunu yapmanın çok kolay bir yolu vardır - nasıl yapılacağını bilmiyorum.
Yanıtlar:
Math.abs'ı aramanız yeterli . Örneğin:
int x = Math.abs(-5);
Hangi ayarlar xiçin 5.
Geçerseniz Integer.MIN_VALUE, aralığı intpozitif eşdeğerin temsil edilmesine izin vermediğinden, aynı değerin (yine de negatif) döndürüleceğini unutmayın.
Integer.MIN_VALUE. Bu youtu.be/IWrpDP-ad7g
Tanımladığınız kavrama "mutlak değer" denir ve Java'nın sizin için bunu yapması için Math.abs adında bir işlevi vardır . Ya da işlev çağrısından kaçınabilir ve kendiniz yapabilirsiniz:
number = (number < 0 ? -number : number);
veya
if (number < 0)
number = -number;
Mutlak değer arıyorsun dostum. Math.abs(-5)5 döndürür ...
Bu kodun pozitif sayılarda çağrılması güvenli değildir .
int x = -20
int y = x + (2*(-1*x));
// Therefore y = -20 + (40) = 20
Bunu deneyin (x'in önündeki negatif, tekli bir operatör olduğu için geçerlidir, daha fazlasını burada bulabilirsiniz ):
int answer = -x;
Bununla, olumludan olumsuza ve olumsuzdan olumluya dönüştürebilirsiniz.
Ancak , yalnızca negatif bir sayıyı pozitif yapmak istiyorsanız, şunu deneyin:
int answer = Math.abs(x);
VEYA , herhangi bir nedenle abs () yöntemini kullanmamayı tercih ederseniz, şunu deneyin:
int answer = Math.sqrt(Math.pow(x, 2));
Umarım yardımcı olur! İyi şanslar!
Her sayıyı içine almak istiyorsunuz Math.abs(). Örneğin
System.out.println(Math.abs(-1));
"1" yazdırır.
Math.-Part'ı yazmaktan kaçınmak istiyorsanız, Math'ı statik olarak dahil edebilirsiniz. Sadece yaz
import static java.lang.Math.abs;
ithalatlarınızla birlikte, abs()-işlevine sadece yazarak başvurabilirsiniz
System.out.println(abs(-1));
Bunu yapmanın en kolay, ayrıntılı yolu, her sayıyı bir Math.abs () çağrısına kaydırmaktır, böylece ekleyeceksiniz:
Math.abs(1) + Math.abs(2) + Math.abs(1) + Math.abs(-1)
kodunuzun nasıl yapılandırıldığını yansıtmak için mantık değişiklikleri ile. Ayrıntılı, belki, ama istediğinizi yapıyor.
-işaret (ler) i kaldırmak daha iyi olmaz mıydı ? Ya da başka türlü, kontrole sahip olmaması da dahil olmak üzere, absoluteSum( int[] values ){ /*loop with Math.abs()*/ }Math.abs () 'ı her bir değere manuel olarak sarmak yerine bir işlev kullanmak daha iyi olmaz mıydı ? [-1]
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 is negative...
if ( value < 0 ) {
//...negate it (make it a negative negative-value, thus a positive value).
value = negate(value);
}
Bir değeri reddetmenin 2 yolu vardır:
value = (-value);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){
//@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));
}
Neden değil mi multiply that number with -1?
Bunun gibi:
//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;
Eğer ikinin tamamlayıcısının mekaniğiyle ilgileniyorsanız, işte kesinlikle verimsiz, ancak açıklayıcı düşük seviyeli yol bu yapılır:
private static int makeAbsolute(int number){
if(number >=0){
return number;
} else{
return (~number)+1;
}
}
Aşağıdaki çözümleri tavsiye ederim:
lib eğlencesi olmadan:
value = (value*value)/value
(Yukarıdakiler aslında çalışmaz.)
lib eğlencesi ile:
value = Math.abs(value);
Kitaplık işlevi Math.abs()kullanılabilir.
Math.abs()bağımsız değişkenin mutlak değerini verir
- bağımsız değişken negatifse, bağımsız değişkenin olumsuzlamasını döndürür.
- bağımsız değişken pozitifse sayıyı olduğu gibi döndürür.
Örneğin:
int x=-5;System.out.println(Math.abs(x));Çıktı: 5
int y=6;System.out.println(Math.abs(y));Çıktı: 6
Negatif sayıyı pozitif sayıya dönüştürmek için (buna mutlak değer denir) Math.abs () kullanılır. Bu Math.abs () yöntemi şu şekilde çalışır
“number = (number < 0 ? -number : number);".
Aşağıdaki örnekte, Math.abs(-1)negatif 1 sayısı pozitif 1'e dönüştürülecektir.
misal
public static void main (String [] args) {
int total = 1 + 1 + 1 + 1 + (-1);
//output 3
System.out.println("Total : " + total);
int total2 = 1 + 1 + 1 + 1 + Math.abs(-1);
//output 5
System.out.println("Total 2 (absolute value) : " + total2);
}
Çıktı
Toplam: 3 Toplam 2 (mutlak değer): 5
Long'un mutlak değerine ihtiyacım vardı ve Math.abs'a derinlemesine baktım ve argümanım -9223372036854775808l olan LONG.MIN_VAL'den küçükse, abs işlevinin mutlak bir değer değil, yalnızca minimum değer döndürdüğünü gördüm. Bu durumda, kodunuz bu abs değerini daha fazla kullanıyorsa, bir sorun olabilir.
Lütfen bunu deneyebilir misin?
public static int toPositive(int number) {
return number & 0x7fffffff;
}
Kotlin'de unaryPlus kullanabilirsiniz
input = input.unaryPlus()
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/unary-plus.html
if(arr[i]<0)
Math.abs(arr[i]); //1st way (taking absolute value)
arr[i]=-(arr[i]); //2nd way (taking -ve of -ve no. yields a +ve no.)
arr[i]= ~(arr[i]-1); //3rd way (taking negation)
Görüyorum ki insanlar bunu söylüyor Math.abs(number)ama bu yöntem tam bir kanıt değil.
Sarmaya çalıştığınızda bu başarısız olur Math.abs(Integer.MIN_VALUE)(bkz. Ref. Https://youtu.be/IWrpDP-ad7g )
Integer.MIN_VALUEGirdiyi alıp almayacağınızdan emin değilseniz . Her zaman bu numarayı kontrol etmeniz ve manuel olarak kullanmanız önerilir.
bunu yapma
sayı = (sayı <0? -sayı: sayı);
veya
eğer (sayı <0) sayı = -sayı;
kodunuzda bul hatası çalıştırdığınızda bu bir hata olacak ve bunu RV_NEGATING_RESULT_OF olarak rapor edecektir.