
오류가 뜬 상황만 캡처 하고 왜 오류가 떴는지는 캡처를 하지 않았다.가끔 나는 정말 멍청한 것같다.
음 일단 이 문제가 오류가 난 이유에 대해 분석을 해보겠다.
음......일단 getName()은 String 형 데이터를 반환 할 것이다. 이것은 변수의 이름에서 알 수가 있다.
그런데 이를 표현하는 포멧을 보자 %d
%d는 정수형 데이터를 표현하는 출력 타입니다.
(참 이것만 보면 옛날 c언어를 살짝 배웠을 때가 기억이난다.)
여튼 %d 라는 int형 데이터만 받을 수 있는 출력타입에 String 타입의 데이터를 입력하려고 하니 당연히 에러가 났다.
사실 이걸 캡처할 때는 몰랐는데 이 코드에는 중요한 하나의 문제가 더 있다.
itr.next()!!!!
문제를 보면
if의 조건문 안에 itr.next() 가 있고
if의 바디 안에 itr.next() 가 있다.
분명 이 코드는 의도하지 않았던 결과가 발생할 것이다.어떤 결과인가?????
예상!위의 next와 아래의 next는 같은 값을 가지고 있을 것이다.Why?? 당근 hasNext를 호출하지 않았자나!!!배울 때 Next는 hasNext로 있는지 뭔저 확인한 다음에 출력해주는 거라고 했어!!!!즉 hasNext 를 호출한 뒤에만 next 를 호출할 수 있어!! 라는 생각이었다.
결과!
저 문장에서 각각의 next는 서로 다른 데이터 값을 가지게 된다.
내가 next를 배웠을 때는 hasNext가 나오기 전까지는 같은 값을 가지고 있다고 생각했었지만, next와 hasNext는 서로 독립적이다. 음...뭔가 서로 독립적이라는 말이 이상한 것같다.
즉. hasNext와 next는 서로 독립적으로 기능을 수행할 수도 있지만 서로 같이 수행할 수 도 있다 라고생각하면 좋을 것같다.
그렇다면 저기서 문제를 해결할 수 있는 방법은 무엇인가???
그건 아주 간단하다.
변수!!!
변수를 만들어서 next 값을 저장하고 그 변수를 이용해서 조건을 비교하고 그 것을 출력하면된다.
예외를 보면 바로 블로깅을 하기로 했는데 음...........상당히 오래전의 내용을 블로깅하는 것 같다.
다시한번 반성하고 앞으로는 열심히 노력하겠다.
2줄 요약
next를 단독으로 사용하더라도 값을 계속 받는다.
올바른 데이터 출력 타입을 사용해야한다.
'이전 학습 내용' 카테고리의 다른 글
| 당신이 넣은 값이 이상하게 마지막 반복 결과로 바뀐다면>?(얕은복사 깊은복사) (0) | 2022.11.27 |
|---|---|
| 오늘의 배움 코드를 쓰는 줄이 중요하다. (0) | 2022.11.25 |
| Thread 임계 구역 설정의 중요성( 동기화) (0) | 2022.11.23 |
| Iterator 사용 시 주의 사항(toNext()) (0) | 2022.11.17 |
| java (0) | 2022.11.17 |