[java] BigInteger를 사용하는 방법?

이 코드 조각이 있는데 작동하지 않습니다.

BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
    if (isPrim(i)) {
        sum.add(BigInteger.valueOf(i));
    }
}

합계 변수는 항상 0입니다. 내가 뭘 잘못하고 있습니까?



답변

BigInteger불변입니다. javadocs는 add () “[r] 값이 (this + val) 인 BigInteger를 반환합니다”라고 말합니다. 따라서 변경할 수 없으므로 메소드 sum결과 addsum변수 에 다시 할당해야 합니다.

sum = sum.add(BigInteger.valueOf(i));


답변

sum = sum.add(BigInteger.valueOf(i))

BigInteger클래스는 따라서 당신이 그 상태를 변경할 수 없습니다, 변경할 수 없습니다. 따라서 “add”를 호출 BigInteger하면 전류를 수정하지 않고 새로운을 만듭니다 .


답변

다른 응답자들이 그것을 못 박았다; BigInteger는 변경할 수 없습니다. 해당 코드가 작동하도록 약간 변경되었습니다.

BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
    if (isPrim(i)) {
        sum = sum.add(BigInteger.valueOf(i));
    }
}


답변

BigInteger는 변경할 수없는 클래스입니다. 따라서 산술을 할 때마다 출력을 변수에 다시 할당해야합니다.


답변

java.math.BigInteger불변 클래스이므로 이미 할당 된 객체의 위치에 새 객체를 할당 할 수 없습니다. 그러나 다음과 같이 새 값을 할당하기 위해 새 개체를 만들 수 있습니다.

sum = sum.add(BigInteger.valueOf(i));


답변

예, 불변입니다

sum.add(BigInteger.valueOf(i));

따라서 BigInteger 클래스의 add () 메소드는 새로운 BigIntger 값을 자체 값에 추가하지 않지만 현재 BigInteger를 변경하지 않고 새로운 BigInteger 참조작성하고 리턴 하며 이는 문자열의 경우에도 수행됩니다.


답변

실제로 사용할 수 있습니다.

BigInteger sum= new BigInteger("12345");

BigInteger 클래스의 객체를 생성하기위한 것이지만 여기서 문제는 큰 따옴표로 변수를 제공 할 수 없기 때문에 valueOf () 메서드 를 사용해야하고 그 합계에 답을 다시 저장해야합니다.

sum= sum.add(BigInteger.valueOf(i));