[JAVA] 조건문, 반복문

1. 조건문


if문

: 만약 조건식이 참(true)이면 괄호{} 안의 문장들을 수행

if (조건식) {
	// 조건식이 참일 때 수행될 문장 작성
}

 

 

if - else문

: 만약 조건식이 참(true)이면 if문 수행, 거짓(false)이면 else문 수행

if (조건식) {
	// 조건식이 참일 때 수행될 문장
} else {
	// 조건식이 거짓일 때 수행될 문장
}

 

 

if - else if문

: 경우의 수가 3가지 이상인 경우 사용

if (조건식1) {
	// 조건식1이 참일 때 수행될 문장
} else if (조건식2) {
	// 조건식1이 거짓 & 조건식2가 참일 때 수행될 문장
} else if (조건식3) {
	// 조건식1, 조건식2가 거짓 & 조건식3이 참일 때 수행될 문장
} else {
	// 위의 어느 조건식도 만족하지 않을 때 수행될 문장
}

 

 

switch문

: 조건식을 계산해서 결과와 일치하는 case문으로 이동하여 이후의 문장들 수행

- 제약조건
   1. switch문의 조건식 결과는 정수 or 문자열
   2. case문의 값은 정수 상수만 가능, 중복 x
switch (조건식) {
	case 값1 :
    	// 조건식의 결과가 값1일 때 수행될 문장
        break;
    case 값2 :
    	// 조건식의 결과가 값1일 때 수행될 문장
        break;
    default :
    	// 조건식의 결과와 일치하는 case문 없을 때 수행될 문장
        break;
}

 

 

  • 가위바위보 게임
- 조건식 : user - com
- if 조건식 값 == 1 or -2, user 승
  else if 조건식 값 == 2 or -1, com 승
  else, 무승부

결과 옆 숫자 값은 user - com

import java.util.*;

public class FlowEx {

	public static void main(String[] args) {
		int user;
		int com;
		
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("가위(1), 바위(2), 보(3) 중 하나를 입력하세요.>");
		user = scanner.nextInt();
		com = (int)(Math.random() * 3) + 1;
		
		System.out.printf("당신은 %d입니다.%n", user);
		System.out.printf("컴은 %d입니다.%n", com);
		
		switch (user - com) {
		case 0:
			System.out.println("비겼습니다.");
			break;
		case 1:
		case -2:
			System.out.println("당신이 이겼습니다.");
			break;
		case 2:
		case -1:
			System.out.println("컴이 이겼습니다.");
		}
	}
}

 

 

  • 문자열 요소 pop

문자열.charAt(n) : 문자열의 n번째 문자 pop

import java.util.*;

public class FlowEx2 {

	public static void main(String[] args) {
		String id;
		char gender;
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("당신의 주민번호를 입력하세요.(011231-1111222)>");
		id = scanner.nextLine();
		gender = id.charAt(7);
		
		switch (gender) {
		case '1':
			System.out.println("당신은 2000년 이전에 출생한 남자입니다.");
		case '3':
			System.out.println("당신은 2000년 이후에 출생한 남자입니다.");
			break;
		case '2':
			System.out.println("당신은 2000년 이전에 출생한 여자입니다.");
		case '4':
			System.out.println("당신은 2000년 이후에 출생한 여자입니다.");
			break;
		default:
			System.out.println("주민번호를 잘못 입력하였습니다. 다시 입력하세요.");
		}	
	}
}

 

 

 

2. 반복문


: 반복되는 조건문

 

 

for문

: 반복 횟수를 알고 있을 때 적합

for (초기화; 조건식; 증감식) {
	// 조건식이 참일 때 수행될 문장
}

 

 

  • 별 피라미드
import java.util.*;

public class LoopEx {
	public static void main(String[] args) {
		int line;
		Scanner scanner = new Scanner(System.in);
		System.out.print("*을 출력할 라인의 수를 입력하세요.>");
		line = scanner.nextInt();
		
		for (int i = 0; i < line; i++) {
			for (int j = 0; j <= i; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

 

 

향상된 for문(JDK1.5 이상부터)

: 배열, 컬렉션에 저장된 요소 접근 시 사용

for (타입 변수명 : 배열 or 컬렉션) {
	// 반복할 문장
}

 

 

예시)

int[] arr = {10, 20, 30, 40, 50};
int sum = 0;
		
for (int i : arr) {
	System.out.printf("%d ", i);
	sum += i;
}
System.out.println();
		
System.out.println("sum="+sum);

 

 

while문

while (조건식) {
	// 반복할 문장
}

 

 

do - while문

: 최소 한 번 이상의 수행이 필요한 경우 사용. 특히 메뉴 표시할 때 주로 사용

do {
	// 반복할 문장
} while (조건식);

※ 마지막에 반드시 ; 넣을 것

 

 

  • 3.6.9 게임
조건식 : if(clap %10%3 == 0 && clap % 10 != 0), print("짝");
import java.util.*;

public class LoopEx2{
	public static void main(String[] args) {
		int clap;
		
		for (int i = 1; i <= 100; i++) {
			System.out.printf("i=%d ", i);
			
			clap = i;
			
			do {
				if (clap%10%3==0 && clap %10 != 0) {
					System.out.print("짝");
				}
			} while ((clap/=10) != 0);
			
			System.out.println();
		}
	}
}

 

 

- break문

: break문이 포함된 가장 가까운 반복문 벗어남

int i = 0;
int sum = 0;
		
while (true) {
	i++;
	sum += i;
	if (sum > 100)
		break; // if문의 조건문을 만족하면 while문 탈출
}
System.out.println("i="+i);
System.out.println("sum="+sum);

 

 

- continue문

: 반복문 도중에 continue문을 만나면 아래 문장을 수행하지 않고 다음 반복으로 넘어감

for (int j = 1; j <= 10; j++) {
	if (j % 3 == 0) {
		continue; // if문을 만족하면 아래 print문 수행하지 않고 다음 반복으로 넘어감
	}
	System.out.println(j);
}

 

 

- 이름 붙은 반복문

  • 계산기
import java.util.*;

public class LoopEx3{
	public static void main(String[] args) {
		int menu, num;
		
		Scanner scn = 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)>");
			menu = scn.nextInt();
			
			if (menu == 0) {
				System.out.println("프로그램을 종료합니다.");
				break outer;
			}
			else if (!(menu >= 1 && menu <= 3)) {
				System.out.println("메뉴를 잘못 선택하셨습니다.(종료는 0)");
				continue;
			}
			
			inner:
			while(true) {
				System.out.print("계산할 값을 입력하세요.(계산 종료:0, 전체 종료:99)>");
				num = scn.nextInt();
				
				if (num == 0)
					break inner;
				else if (num == 99)
					break outer;
				
				switch (menu) {
				case 1:
					System.out.printf("result=%d%n", num*num);
					continue;
				case 2:
					System.out.printf("result=%.1f%n", Math.sqrt((double)num));
					continue;
				case 3:
					System.out.printf("result=%.1f%n", Math.log((double)num));
					continue;
				}
			}
		}
	}
}