클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

반복문과 배열 그리고 예외 처리 2 - for문 + while문, do-while문 본문

프로그래밍 언어/자바

반복문과 배열 그리고 예외 처리 2 - for문 + while문, do-while문

huenuri 2024. 8. 11. 02:46

지난번에 for문 기초 학습을 진행하다만 부분부터 다시 학습을 진행해볼 것이다. 밤 12시쯤 학습하려고 첫 화면을 열었으나 졸려서 12시 반쯤 취침을 했다. 하지만 30분이 넘도록 잠이 오지 않아 뒤척이다 일어나 공부를 시작해본다.

 

학습 목표

  1. for문과 whil문 책과 수업 내용 모두 학습을 마친다.
  2. 예제 문제는 동영상을 멈추고 혼자서 먼저 풀어보는 것을 원칙으로 한다.
  3. 시간이 많이 걸리는 경우 우선 학습을 위주로 하고 다음에 다시 스스로 풀어보기로 한다.
  4. 틀린 코드도 실행해보고 그 이유를 찾아본다.

 

학습 시간

새벽 1시 ~ 2시
새벽 5시 ~ 7시 반 <3시간 반 소요>


 

 

for문 2

 

약수와 총합 구하기

 

exception 에러가 발생했다. 그 이유는 i가 0으로 초기화되어 있기 때문이다. 약수를 구할 때는 i는 1부터 시작해야 나눌 수 있는 수가 된다.

 

 

 


 

 

좋은 코드란 무엇인가?

 

약수의 특징은 자기자신에서부터 그 다음 약수까지의 절반의 값이 없다는 것이다. 즉 200의 약수는 200 다음으로 100이 되니 그 사이의 값이 존재하지 않는다. 여기서 시간복잡도를 줄이기 위해 이와 같은 방법을 사용할 수 있다. 그러면 시간이 절반으로 단축될 수 있다.

 

 

코드를 짤 때는 이런 부분까지 염두하며 클린한 코드를 만들 수 있도록 고민해야 한다.


 

 

 

예제 3-1 : for문을 이용해서 1에서 10까지 합 출력

 

답은 제대로 나왔는데 수식이 이상하다. 이는 print문을 if문 바깥쪽에 써서 그런 것 같다.

 

 

이제 제대로 출력이 되었다. else문 안에 썼는데도 같은 결과가 나와서 중괄호로 묶으니 이번에는 잘 되었다. 문장이 하나라도 해서 책에 나온대로 괄호를 생략했더니 어디에 붙여야 하는지 헤깔렸다.
그냥 하나든 두개든 중괄호는 매번 쓰는 것이 좋다는 걸 알게 되었다.


 

 

while문


 

예제 문제 1번

 

앞에서 정의한 변수를 똑같이 사용했더니 오류가 떴다.

 

 

 

무한반복인 true에서 종료 조건을 주고 break로 빠져나가는 방법과 처음부터 조건을 주는 방법이 있다.

 


 

 

예제 문제 2번

 

계속해서 이런 오류가 왜 뜨나 했는데 scanner를 너무 일찍 닫아주어서 그런 거였다.

 

 

이제 잘 된다. scanner는 while문이나 조건식 뒤에 나와야 한다.


 

예제 문제 3번

 

조금 어려운 문제였다. 종료 조건을 어디에 주느냐가 중요한데, 결과값을 모두 출력한 후 -1을 만나면 값을 계산하고 종료가 되므로 이곳에 써야 한다.

 


 

 

 

예제 3-2 : -1이 입력될 때까지 입력한 수의 평균 구하기

 

이번에는 앞선 문제와 달리 평균을 구하는 부분이 추가되었다. 평균은 소숫점 자리이므로 double로 형변환을 해준다는 것을 잊지 말자!


 

 

 

do-while문

 

 

예제 문제 1번

 

false이더라도 적어도 한번은 실행이 되는 문이다.

 

 

while에서는 아무것도 출력이 되지 않았지만, do-while에서는 한번 출력이 되었다.


 

 

 

예제 문제 2번

 

 

 

종료 조건을 어디에 쓰느냐에 따라 값이 달라진다. 처음에 한 이유는 짝수와 홀수의 값을 출력할 필요없이 -1을 만나면 종료할 수 있게 하기 위함이다.


 

 

 

예제 문제 3번

 

 

정말 어려운 문제였다. while문은 평소에도 어려워하던 부분이라 혼자서 풀 수는 없어 대부분 선생님의 풀이를 보면서 학습하는 중이다.


 

 

 

예제 문제 4번


 

문제를 풀기 전에 알아두어야 할 것

 

이 내용은 책에서 읽고 학습했으나 수업 시간에 설명한 내용이라 한번 더 메모해보았다.


 

1단계 과정 풀기

 

틀렸을 때 계속해서 반복이 되고 있다. else문에서 3회까지만 할 수 있도록 조건을 주어야 한다.


 

 

 

나머지 과정 진행하기

 

 

 

아이디와 비밀번호가 3회 모두 틀렸을 때는 이렇게 본인인증을 하라는 문구가 나온다.

 

성공했을 때는 이렇게 출력된다. 문제가 너무나 어려워서 이해만 하는데도 시간이 굉장히 많이 걸렸다.


 

 

 

학습을 마치고

문제를 풀어도 풀어도 끝이 없이 예제가 정말 많았다. 그리고 문제들도 정말 어려워서 while문 예제부터는 다시 혼자서 푸는 연습이 많이 필요할 것 같다.
다음 포스트에 while문을 더 이어서 학습하거나 다른 공부를 시작해보려고 한다. 계속 이 공부만 했더니 조금 지치기도 하니까~

많은 문제를 풀어보며 그동안 약했던 부분을 보충해볼 수 있어서 좋았다.