본문 바로가기
Java/Java

반복문) for문, for문 무한루프

by 박채니 2022. 3. 7.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


반복 제어문 중 하나인 for 문에 대해서 알아보겠습니다.

for문과 또 다른 문법인 while은 서로 상위호환합니다.


☞ for문

- 초기식 : 증감 변수 선언(시작할 때 단 한 번만 실행!)

- 조건식 : 반복문 실행 여부를 결정하는 논리식 (결과가 true가 나오는 동안 실행 구문 계속 반복)

- 증감식 : 증감 변수에 대한 변수의 증감 처리

//기본구문
for(초기식;조건식;증감식) {
	//실행구문
}
for(int i = 0; i < 10; i++) {
	System.out.print(i + " ");
}

@콘솔출력값
0 1 2 3 4 5 6 7 8 9

for문이 실행되면 

초기식 실행 → 조건식(t) → 실행구문 실행 → 증감처리

→ 조건식(t) → 실행 구문 실행 → 증감처리 ..... 반복 → 조건식(f) for문 탈출

위와 같은 실행 순서를 갖게 됩니다.

 

'0번째부터 i가 10보다 작을 때까지 i를 출력하라' 라는 의미를 가진 for문이 실행되는 것이죠.

 

/**
	 * 1 ~ 20까지 출력
	 * 20 ~ 1까지 출력
	 * 11 ~ 15까지 출력
	 * 홀수만 20까지 출력
	 * 짝수만 20~2까지 출력
	 */
public void test2() {
	for(int i = 1; i <=20; i++) {
		System.out.print(i + " ");
	}
	System.out.println();
	
	for(int i = 20; i >=1; i--) {
		System.out.print(i + " ");
	}
	System.out.println();
	
	for(int i = 11; i <= 15; i++) {
		System.out.print(i + " ");
	}
	System.out.println();
	
	//증감 변수 이용하여 홀수 출력
	for(int i = 1; i <= 20; i+=2) {
		System.out.print(i + " ");
	}
	System.out.println();
		
	//if문 이용하여 짝수 출력
	for(int i = 20; i >= 1; i--) {
		if(i % 2 == 0)
			System.out.print(i + " ");
	}
	System.out.println();
 }
    
@콘솔출력값
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 
11 12 13 14 15 
1 3 5 7 9 11 13 15 17 19 
20 18 16 14 12 10 8 6 4 2

원하는 결과 출력에 따라 증감 변수의 값과 반복 횟수, 증감 처리 등을 조절할 수 있습니다.

※ for문의 초기식 안에서 변수 선언 시, for문의 내부에서만 사용할 수 있고 for문이 끝나면 (중괄호가 닫히면) 변수는 사라집니다.

 

 

구구단 출력하기

public void test3() {
	Scanner sc = new Scanner(System.in);
	System.out.print("> 단을 입력하세요 : ");
	int dan = sc.nextInt();
		
	System.out.printf("====%d단====\n", dan);
	for(int i = 1; i < 10; i++ ) {
		System.out.printf("%d X %d = %d\n", dan, i, dan*i);
	}
}

@콘솔출력값
> 단을 입력하세요 : 3
====3단====
3 X 1 = 3
3 X 2 = 6
3 X 3 = 9
3 X 4 = 12
3 X 5 = 15
3 X 6 = 18
3 X 7 = 21
3 X 8 = 24
3 X 9 = 27

고정 값이 단이므로 for문의 변수는 값으로 설정하여 구구단을 출력할 수 있습니다.

 

 

이름과 반복횟수 입력 받고 출력하기

public void test4() {
	Scanner sc = new Scanner(System.in);
	System.out.print("> 이름을 입력하세요 : ");
	String name = sc.next();
	System.out.print("> 반복횟수를 입력하세요 : ");
	int loop = sc.nextInt();
		
	for(int i = 1; i <= loop; i++) {
		System.out.println(name + " " + i);
	}
}

@콘솔출력값
> 이름을 입력하세요 : 홍길동
> 반복횟수를 입력하세요 : 10
홍길동 1
홍길동 2
홍길동 3
홍길동 4
홍길동 5
홍길동 6
홍길동 7
홍길동 8
홍길동 9
홍길동 10

위 처럼 사용자가 반복횟수를 매번 원하는 만큼 조정할 수 있습니다. (조건식)

 

 

1~10 합 구하기 (누적변수)

public void test5() {
	//누적변수 선언
	int sum = 0;
		
	for(int i = 1; i <= 10; i++) {
		sum+=i;
	}
	System.out.println(sum);
}

@콘솔출력값
55

여기서 주의할 점!

반드시 누적변수는 for문 밖에 선언해야합니다.

☞ for문 내에 선언하게 된다면, for문이 돌 때마다 누적변수가 초기화 될 것이며 for문 밖에서 변수 선언이 불가할 것 입니다.

//		int sum = 0;
		
	for(int i = 1; i <= 10; i++) {
		//누적변수 for문 내에 위치 - for문이 돌 때마다 0으로 초기화
		int sum = 0;
		sum+=i;
			
		System.out.println(sum);
}

@콘솔출력값
1 2 3 4 5 6 7 8 9 10

for문이 돌 때마다 sum 변수의 값이 0으로 초기화 되기 때문에 출력값은 i+0이기 때문에 i의 값만 출력 되었습니다.

 

 

두 수를 입력 받고 두 수 사이의 홀수 값 출력하기

public void test6() {
	Scanner sc = new Scanner(System.in);
		
	System.out.print("> 정수1를 입력하세요 : ");
	int num1 = sc.nextInt();
	System.out.print("> 정수2를 입력하세요 : ");
	int num2 = sc.nextInt();
		
	int big = num1 < num2 ? num2 : num1;
	int small = num1 > num2 ? num2 : num1;
		
	for(int i = small; i <= big; i++) {
		if(i % 2 == 1)
			System.out.print(i + " ");
}

@콘솔출력값
> 정수1를 입력하세요 : 5
> 정수2를 입력하세요 : 10
5 7 9

삼항 연산자로 큰 수, 작은 수를 미리 판별 후 for문을 돌렸습니다.

 

☞ for문 무한 루프

- 초기식, 조건식, 증감식 생략 가능하며, 조건식은 생략 시 true가 자동 삽입

- 조건식이 true이므로 계속해서 반복 실행

- break 키워드를 이용하여 무한 루프 탈출

public void test7() {
	String menu = "--------------------\n"
			+ "1. 떡볶이(3000원)\n"
			+ "2. 순대(3500원)\n"
			+ "3. 어묵(2500원)\n"
			+ "--------------------\n"
			+ "선택 : ";
	Scanner sc = new Scanner(System.in);

	int sum = 0;
		
	//무한루프
	for(;;) {
		System.out.print(menu);
		String choice = sc.next();
		
		switch(choice) {
		case "1": sum+=3000; break;
		case "2": sum+=3500; break;
		case "3": sum+=2500; break;
		}
			
		System.out.print("> 더 주문하시겠습니까?(y|n) : ");
		char add = sc.next().charAt(0);
		
        //add가 n면 break로 무한루프 탈출!
		if(add == 'n') 
			break;
	}
	System.out.println("주문해주셔서 감사합니다.");
	System.out.println("결제 금액은 " + sum + "입니다.");
}

@콘솔출력값
--------------------
1. 떡볶이(3000원)
2. 순대(3500원)
3. 어묵(2500원)
--------------------
선택 : 1
> 더 주문하시겠습니까?(y|n) : y
--------------------
1. 떡볶이(3000원)
2. 순대(3500원)
3. 어묵(2500원)
--------------------
선택 : 2
> 더 주문하시겠습니까?(y|n) : n
주문해주셔서 감사합니다.
결제 금액은 6500입니다.