내가 사용하는 iter.next() 에서 던진 에러.
어디서 뜨는 지는 이미 알고 있었지만 어떻게 해결해야 될지 몰라 스택오버플로우를 참조했다.
Iterator<Entry<Integer,Integer>> iter = hash.entrySet().iterator();
while (iter.hasNext()) { // 문제가 되는 부분
if (iter.next().getValue() == 1) {
answer = iter.next().getKey();
break;
}
}
답변은 아래와 같다.
You are calling next() a bunch of times in one iteration forcing the Iterator to move to an element that doesn't exist.
iter.next()는 다음 커서의 객체를 접근 하는 개념이 아니라 현재 커서를 다음 커서로 이동시키는 것이다.
따라서 iter.next() 가 불릴때마다 iteration 의 커서가 한칸씩 앞으로 가기 때문이라고 말하는 듯 하다. (스택오버플로우의 질문글은 조건문 괄호 하나 안에 iter.next() 가 여러개 배치되어있었다 )
따라서 iter.next() 를 하나의 객체로 받은 뒤에 접근하여 코드를 수정하니 오류는 해결되었다.
Iterator<Entry<Integer,Integer>> iter = hash.entrySet().iterator();
while (iter.hasNext()) {
Entry<Integer, Integer> entry = iter.next();
if (entry.getValue() == 1) {
answer = entry.getKey();
break;
}
}