이 코드 조각이 있는데 작동하지 않습니다.
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
결과 add
를 sum
변수 에 다시 할당해야 합니다.
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));