Ben çalışmıyor bu kod parçası var:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
Toplam değişken her zaman 0'dır. Neyi yanlış yapıyorum?
Ben çalışmıyor bu kod parçası var:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
Toplam değişken her zaman 0'dır. Neyi yanlış yapıyorum?
Yanıtlar:
BigInteger
değişmez. Javadocs, add () "[r] 'nin değeri (bu + val) olan bir BigInteger verdiğini belirtir. Bu nedenle, değiştiremezsiniz sum
, add
yöntemin sonucunu sum
değişkene yeniden atamanız gerekir .
sum = sum.add(BigInteger.valueOf(i));
BigInteger değişmez bir sınıftır. Bu nedenle, herhangi bir aritmetik işlem yaptığınızda, çıktıyı bir değişkene yeniden atamanız gerekir.
Evet bu değişmez
sum.add(BigInteger.valueOf(i));
BigInteger sınıfının add () yöntemi kendi değerine yeni BigIntger değeri eklemez, ancak geçerli BigInteger'i değiştirmeden yeni bir BigInteger başvurusu oluşturur ve döndürür ve bu, Dizeler durumunda bile yapılır
Aslında kullanabilirsiniz,
BigInteger sum= new BigInteger("12345");
BigInteger sınıfı için nesne oluşturmak için.Ancak burada sorun, çift tırnak içine bir değişken veremezsiniz. Bu yüzden valueOf () yöntemini kullanmamız gerekir ve cevabı tekrar bu toplamda saklamamız gerekir.
sum= sum.add(BigInteger.valueOf(i));
Biginteger
değişmez bir sınıftır. Çıktınızın değerini şu şekilde toplamak için açıkça atamanız gerekir:
sum = sum.add(BigInteger.valueof(i));
Bazı int değerlerini bir araya getirdiğiniz için BigInteger kullanmaya gerek yoktur. long
bunun için yeterlidir. int
32 bit, long
64 bit ise tüm int değerlerinin toplamını içerebilir.
int
, bu nedenleBigInteger
bu örneğe ihtiyacınız yoktur .