자리수더하기

DeadWhale·2022년 10월 2일
0

프로그래머스

목록 보기
1/21
post-thumbnail
import java.util.*;

public class Solution {
    int answer = 0;
    public int solution(int n) {
        Arrays.stream(String.valueOf(n).split("")).forEach(o->answer+=Integer.parseInt(o));
        return answer;
    }
}

이런식으로 정리 했다
람다 한번 알게되니깐 뭔가 겉멋든것 처럼 쓰게 노력하는 것 같다.

Solution.java:7: error: variable answer might not have been initialized

이런 에러가 발생했었는데.
람다는 참조하는 지역변수의 대한 복사본을 가지고 동작하기 때문이라고 한다.

실행 시점에 GC에 의해 사라지는 것을 방지하기 위해 . 람다는 복사본을 가지고 동작하게 된다.
복사본을 가지고 미래에 동작할 예정인대 동작하기전 원본의 값이 바뀌면 오류가 발생할 가능성이 높아
애초에 컴파일 에러를 출력하는 것이였다

해결 방법으로 나는 그냥 전역으로 선언했다 옮바르다고 하진 못하지만 나는 람다를 쓰고 싶었고
이에 대한 해결을 하고 싶었다

전역으로 선언 하면서 해당 메서드가 수행되는 동안 전역변수 answer가 변할 일은 없음으로 정상적으로 동작되었다.

0개의 댓글