Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

구마찌의 이진수 여행기

제어문의 모든 것 ( For문, While문) 본문

JAVA/Java

제어문의 모든 것 ( For문, While문)

구마찌 2018. 8. 15. 23:19

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;
				}
				
			}
		}
	}
}


> 반복문에 이름을 줄 수도 있다! 이름을 주면 반복을 끝내고 싶은 반복문을 쉽게 끝낼 수도 있다. 

처음 봤는데 좋은 거 같아서 중첩 반복문이 많아지면 사용해 볼 생각이다.





Comments