구마찌의 이진수 여행기
제어문의 모든 것 ( For문, While문) 본문
1. For문
1) int i=0;
2) i < 10;
3) System.out.println("안녕하세요, 구마찌입니다.");
4) i++
마지막 4번 증감식에는 세미콜론을 붙이면 안된다.
>> 초기화 시, 조건식을 만족하게 되면 수행할 문장을 수행하게 된다. 문장을 끝내고 증감식을 수행하고
증감식 수행 후 조건식을 만족하게 되면 또다시 {} 안 문장을 수행한다. 만약 증감식 이후에 조건식에 만족하지
못할 경우에는 {} 괄호 밖으로 빠져나가서 반복문이 멈추게 된다.
아,, 대소비교 연산자 때문에 캡쳐해야돼 ..ㅠㅠ
▶ inp는 내가 입력한 값이다. 내가 입력한 값을 5라고 생각해보자.
0부터 4까지 한번씩 반복을 하는데 한번 반복할 때 빨간색이 실행된다.
▶ j는 0부터 i까지 한번 돈다. 위에서 i는 +1이 되었기 때문에 j <= 1; 한번 돈다.
그래서 * 한개만 찍어주고 바로 for문으로 이동
▶ 빨간for문을 빠져나와서 개행해주는 구문을 만난다.
i=1인 상태고, inp값인 5까지는 아직 멀었으니 증감 연산자로 +1 더 해준다.
위 상황 반복.
엄청 헷갈렸다. 별 찍어주는 것도 고민 많이하고 했었다. 하지만 그림 그리면서 천천히 해보면 되더라!
2. While문
1) i<5
2) i++;
while은 for문과 다르게 초기화, 조건식, 증감식이 다 따로따로 분포해 있다. 한 괄호안에 다 해주지 않는다.
보통 초기화는 while문 밖에다가 해준다. while문 안에다가 초기화를 시키게 되면, 초기화 한 변수에 값을 저장했을 때
또다시 초기화 해서 값이 날라가버리기 때문이다. 그래서 보통 while문 안에 반복시킬 증감식을 넣는다.
또한 for문과 다르게 while문에서는 조건식 생략하면 에러남 ;; 까다로운 아이
나같은 경우에는 딱히 둘 조건식이 없을 때 ture로 두고 if 문 등으로 break걸어주는 식으로 구현한다.
import java.util.Scanner; public class FlowEx27 { public static void main(String[] args) { int num; int sum = 0; boolean flag = true; System.out.println("합계를 구할 숫자를 입력하세요. (끝내려면 0을 입력)"); while(flag) { System.out.print(">>"); Scanner sc = new Scanner(System.in); String tmp = sc.next(); num = Integer.parseInt(tmp); if(num!=0) { sum += num; } else { flag = false; } } System.out.println("합계: " + sum); } }
> 여기서, flag에 true값을 저장시켜 놓고 무한루프를 돌린다. 무한 루프를 빠져나갈 방법으로는 if문을 수행시키는 건데
else를 만났을 때 flag를 false로 해주면서 while문은 종료되게 된다. 종료된 후 sum의 합계를 출력.
간혹 가다가 do-while문을 쓴다. 사실 개인적으로 잘 쓰는 구문이 아니라 간단히 되새김질만 하는걸로..
do { } while(조건식);
do (실행해 그냥~)를 지나서 조건식을 마주하기 때문에 무조~~~건 한번은 실행하게 된다는 마성의 매력을 가진 do-while.. 이런 마성의 매력은 나를 헷갈리게 만들기 때문에 잘 쓰지 않는 편이다.. !! ^^*
중요하게 생각해야될 것은 while 옆에 세미콜론을 달아야 한다는 것. 개인적인 해석으로는 아마 문장의 끝이라고 생각해서 세미콜론을 달아야 하는 거라고 생각한다.
+) Break, Continue
Break는 쉽게 말해서 반복문의 오아시스 같은 존재?
사막위를 계속 걷는 거 같은 반복문중에 특정 구문을 만나면 break 해주는 역할이다. break는 주로 if문과 같은 조건문에 많이 붙어다니는 친구다. 반복문을 끝내고 싶을 때는 break~
Continue는 단어 뜻 그대로 '계속 진행'하는 역할을 한다.
그니까 만약에 특정 구문을 만나게 되면 "나 신경쓰지 말고 다음으로 넘어가~" 이런 느낌..?
예를 들면 1부터 5까지 수 중에 3을 제외한 나머지를 출력하는 프로그램을 짤 때 쓰이기도 한다.
3을 만나면 continue; 해줘서 다음 4로 넘어간다는 얘기!
import java.util.Scanner; public class FlowEx34 { public static void main(String[] args) { int menu = 0, num = 0; Scanner sc = new Scanner(System.in); outer: while(true) { System.out.println("(1) square"); System.out.println("(2) square root"); System.out.println("(3) log"); System.out.print("원하는 메뉴 (1~3)를 선택하세요. (종료 : 0) >> "); String tmp = sc.next(); menu = Integer.parseInt(tmp); if(menu==0) { System.out.println("프로그램을 종료합니다."); break; } else if(!(1<=menu && menu<=3)) { System.out.println("메뉴를 잘못 선택하셨습니다. (종료 : 0)"); continue; } for(;;) { System.out.print("계산할 값을 입력하세요. (계산 종료 : 0, 젼체 종료 : 99) >> "); tmp = sc.next(); num = Integer.parseInt(tmp); if(num == 0) { break; } if(num == 99) { break outer; } switch(menu) { case 1: System.out.println("result= " + num*num); break; case 2: System.out.println("result= " + Math.sqrt(num)); break; case 3: System.out.println("result= " + Math.log(num)); break; } } } } }
> 반복문에 이름을 줄 수도 있다! 이름을 주면 반복을 끝내고 싶은 반복문을 쉽게 끝낼 수도 있다.
처음 봤는데 좋은 거 같아서 중첩 반복문이 많아지면 사용해 볼 생각이다.
'JAVA > Java' 카테고리의 다른 글
[Java]인스턴스변수, 클래스변수, 멤버변수 (0) | 2018.10.03 |
---|---|
제어문의 모든 것 ( If문과 Switch-case 문 ) (0) | 2018.08.15 |
기초 교재 및 진행 방향 (2) | 2018.08.14 |