[JAVA기초][조건문] Switch문

포키·2022년 10월 5일
0

국비과정

목록 보기
10/73

중복 제거하는 법

  • 값 중복
    -> 변수 사용
  • 연산 중복
    -> 1. 연속, 규칙이 있을 경우 - 반복문
    -> 2. 연속x 규칙x - 범위 지정, 메서드 작성 등

Switch문

switch(n){
	case 1:
    	A;
    case 2:
    	B;
	default:
    	C;
}
D;

// n 자리에는 정수(byte, short, **int**, **char**)
// n이 1이라면, A->B->C->D 실행
// n이 2라면, B->C->D 실행
// n이 1도 2도 아니라면, C->D 실행

default가 없다면 switch문의 실행이 언제나 보장되지 않음
(if문의 else와 유사성)

  • 제어식에는 정수가 들어갈 수 있다. (long 불가, 1.7부터 String 가능)
  • break로 블록을 중간에 탈출할 수 있다.
switch(n){
	case 1:
    	A;
        break;
    case 2:
    	B;
        break;
	default:
    	C;
}
D;

// n이 1이라면, A->D 실행
// n이 2라면, B->D 실행
// n이 1도 2도 아니라면, C->D 실행

예제

import java.util.Scanner;
//
class SwitchEx1{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
//
		System.out.print("수를 입력하세요: ");
		int num = sc.nextInt();
//
		switch(num) {
			case 1:
				System.out.println("A");
				break;
			case 2:
				System.out.println("B");
			case 3:
				System.out.println("C");
				break;
			default:
				System.out.println("D");
		}
	}
}
// 1일때 A / 2일때 B->C / 3일때 C / 4일때 D

switch -> if문 변환 1

import java.util.Scanner;
//
class SwitchEx1{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
//
		System.out.print("수를 입력하세요: ");
		int num = sc.nextInt();
//
		if(num == 1){
			System.out.println("A");
		} else if(num == 2){
			System.out.println("B");
			System.out.println("C");
		} else if(num == 3) {
			System.out.println("C");
		} else {
			System.out.println("D");
		}
	}
}

switch -> if문 변환 2

import java.util.Scanner;
//
class SwitchEx1{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
//
		System.out.print("수를 입력하세요: ");
		int num = sc.nextInt();
        String result;
//
		if(num == 1){
			result = "A";
		} else if(num == 2 || num == 3) {
			if(num == 2){
				System.out.println("B");
			}
			result = "C";
		} else {
			result = "D";
		}
        System.out.println(result);
	}
}
// 리팩토링!!!
// if문 중첩으로 System.out.println("B"); 중복을 없애고
// result 변수 사용으로 System.out.println(); 중복을 없앰

switch문 vs. if문

여러가지 상황에 공통으로 해야하는 일이 많을수록 switch가 편함
상황을 판별하고 조건을 확인하는 일은 if가 편함
표현할 수 있는 범위, 가능한 범위는 if문이 더 넓고 -> 그래서 일반적으로 if문이 더 잘 쓰임

		switch(month){
        	default: 
            	System.out.println("1~12 사이의 숫자를 입력하시오.");
			case 1:	
            case 3:	
            case 5:	
            case 7:	
            case 8:	
            case 10: 
            case 12:
				System.out.println("31일");
				break;
			case 4: 
            case 6: 
            case 9: 
            case 11:
				System.out.println("30일");
				break;
			case 2:
				System.out.println("28일");
		}
		// 아래로 쭉 내려오며 실행하는 switch에 적합한 명령
        
		if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
			System.out.println("31일");
		} else if(month == 4 || month == 6 || month == 9 || month == 11){
			System.out.println("30일");
		} else if(month == 2){
			System.out.println("28일");
		}
		// 

switch문은 순서가 없다
차례대로 검사하는 구조가 x
참고

import java.util.Scanner;

public class Score2Grade {
	public static void main(String[] args){
		int score;
		int number;
		char grade;

		Scanner sc = new Scanner(System.in);
		System.out.print("성적을 입력하시오: ");
		score = sc.nextInt();
		number = score / 10;
		switch (number) {
			case 10:
			case 9:
				grade = 'A';
				break;
			case 8:
				grade = 'B';
				break;
			case 7:
				grade = 'C';
				break;
			case 6: 
				grade = 'D';
				break;
			default:
				grade = 'F';
				break;
		}
		System.out.println("학점: " + grade);
	}
}
// switch문으로 범위를 구현한 예시

최신 버전 = 좋은 버전?

  • 버전이 올라갈수록 대체로 코드 효율은 좋아지지만, 그게 꼭 좋은 건 아니다.
    버전 호환성이 떨어져 기존에 사용하던 코드를 재사용하기 어렵다.
    Java 12에서 새로 나온 '향상된 switch문(->)'이나 'var(변동자료형)' 등.
    하지만 꼭 사용할 필요 X, var는 오히려 더 불편해서 안 쓰기도 함.
    (js는 var를 사용하는데, 불편해서 자바처럼 바꾼 type script, 개선안이 나오기도 함)
  • 언어체계가 확립되어 기준이 되는 버전 = 1.5 (라고 강사님은 생각)
    신기술은 알아두면 좋지만, 사용하는 건 고민이 필요.

for문

for (초기값; 조건; 증감식){
	명령문;
}

순서는 '초기값' 설정 -> '조건' 확인 -> '명령문' 수행 -> '증감' 연산 -> '조건' 확인 -> '명령문' 수행 -> ...
조건이 true일 경우 명령문 반복
조건이 false일 경우 for문 종료

for (int i = 0; i < 4; i++){
	System.out.println("A");
}
// A가 4번 출력

반복문 해석하는 법

public class ForExample1 {
	public static void main(String[] args){
		for (int i = 0; i < 5; i++){
			System.out.println("i의 값은: " + i);
		}
	}
}
  1. 변하는 값 찾기 (증감연산자 or 대입연산자 찾기)
  2. 값의 변화를 표로 정리하기

반복문 작성하는 법

int sum = 0;
sum = sum + 1;
sum = sum + 2;
sum = sum + 3;
...
sum = sum + 10;
// 1부터 10까지를 더한 값을 sum에 담기
for(int i = 1; i <= 10; i++){
	sum+ = i;
}
// for문을 이용하여 간단히 만들기
  1. 풀어서 적어보기
  2. 공통점, 규칙 찾기
    (수학에서 수열 문제-일반항 찾기와 비슷한듯)

for문 조건식은 내용 생략, 변형 가능

for(int i = 0; i > 0;){
	i++;
}
for(int i = 0;; i++){
	System.out.println("*");
}
for(;;){
	System.out.println("it's looping~ help me out!");
}

전부 가능
(하지만 조건식은 대부분 적음)
반복문은 언제나 무한루프 주의 (반드시 어딘가에서는 탈출이 가능해야 함)

printf

%d: 정수(십진수)
%f: 실수
%s: 문자열
\n: 줄바꿈
class PrintEx {
	public static void main(String[] args){
		// 2022년 10월 5일
		int year = 2022;
		int month = 10;
		int day = 5;

		System.out.println(
			year + "년 " + month + "월 " + day + "일"
		);
		System.out.printf("%d년 %d월 %d일\n", year, month, day);
	}
}
\ : escape character (역슬래시) - 기본 해석을 벗어남, 다음 문자에 대한 대체 해석을 호출하는 문자
\n : 줄바꿈
\t : tab
\" : 글자 "(쌍따옴표)
\\ : 글자 \(역슬래시)
System.out.println("아버지가 \"나가\"라고 하셨다.");
System.out.println("c:\\test");
// -> 아버지가 "나가"라고 하셨다.
// -> c:\test
import java.util.Scanner;

public class Divisor{
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		System.out.print("양의 정수를 입력하시오: ");
		int n = scan.nextInt();

		System.out.println(n + "의 약수는 다음과 같습니다.");
		for (int i = 1; i <= n; ++i){
			if (n % i == 0)
				System.out.print(" " + i);
		}
	}
}
profile
welcome

0개의 댓글