6월 1일 화요일 (16일차) - 다중if문,스위치문ㅇ

@_@·2021년 6월 1일
0

Java 1부

목록 보기
13/27

<목차>
ㅇ 단순 if문, if-else문 복습
ㅇ 다중 if문
ㅇ switch문


CF. 콘솔 창이 안 보이면 : 윈도우 - 쇼 뷰 - 콘솔



ㅇ 스캐너 (진짜 마지막으로 적어보자)

  • 1 : 데이터타입 변수명 = 뉴 데이터타입(키보드입력명령어);
    Scanner sc = new Scanner(System.in);
  • 2 임포트
  • 3 ln지운 안내문구
    • nextInt는 콘솔에다가 데이터를 입력받는 역할만 하기 때문에
    • 안내문을 먼저 출력
  • 4 이제 내가 입력한 값이 nextInt에 들어가는데,
    이걸 계속 사용하고 싶으니까 변수에 저장

CF. 쌤은 능력이 있는 변수들은 맨 위에 만들어둬

ㅇ 스캐너 자동완성

  • Sc 컨트롤 스페이스 엔터 (S 대문자, c 소문자)



ㅇ 조건문

  • 조건에 따라 다양한 로직을 처리해야 할 때 사용
  • "판별", "판단"해야 할 때 조건문
  • 종류 : 단순 if문 / if-else문 / 다중 if문 / switch문

(복습이라 간단하게만)

ㅇ if문

  • 조건식은 참/거짓의 결과를 가지는 식
  • if는 조건'문'. 그 안에 넣는 건 조건'식'

ㅇ if-else문




ㅇ 다중 if문

  • 조건에 따라 다양하게 처리할 수 있어
  • 효율성 때문에 사용
  • if문 여러 개를 사용하는 것의 단점
    • 앞의 조건이 False인 경우를 if문에 항상 넣어줘야 해
    • (점심메뉴 고르기 예제) 그냥 if만 쓰면, 아래 if문들 다 참이라서 초밥세트,육개장,백반 모두 먹겠다가 돼
    • 일일이 False 조건 넣으면 너무 번거롭잖아
  • 그래서 else if를 쓰면?!
    • 첫 if문이 참이면 -> 아래 있는 else if 조건문 아얘 보지도 않고 빠져나가
    • 첫 if 문이 거짓이면 그 아래 조건문으로 가
  • 위에서 조건 해당이 안 되면 계속 아래로 내려가다가
    조건이 해당 되면 거기 중괄호 조건문을 실행하고 빠져나가!
  • 이러면 다음 조건식에  False 조건 굳이 넣어줄 필요 없어져
  • else if문에 마지막에 else 없어도 돼


ㅇ 예제 : 점수 범위에 따른 학점주기 (추가) 70점 미만은 에프

  • 90점 이상이면 뒤의 80, 70, 60점 체크할 필요 없으니까 => 다중 이프 문
    (답)



ㅇ switch문

  • 괄호 안에는 조건식이 아니라 '식'이 들어가. 결괏값이 있는 것
    (조건식은 식 범주 안에 포함돼. 그중 결과가 T/F 인 것)
  • 그 결괏값에 따라 케이스에 값을 작성하고, 값에 해당하는 경우를 실행
  • 값이 딱딱 떨어지는 경우에 스위치.  범위 조건은 줄 수 없어
switch () {
    case1 : <- 콜론이야! 세미콜론 아니라!!!
          실행문장
          break;
    case2 : 
          실행문장
          break;
    case3 : 
          실행문장
          break;
   	¨¨¨
    default :
    }

ㅇ 예제) 인사말 출력하기

    1. 만나서 반가워, 2. 밥 먹었니, 3.잘가~ 를 출력할 수 있도록

이렇게 시도하겠지?!

switch (choice) {
	case 1:
		System.out.println("만나서 반가워~~!");
	case 2:
		System.out.println("밥 먹었니?");
	case 3:
		System.out.3println("잘가~");
}
  • 문제점 1 : 해당 값의 케이스 밑의 코딩까지 쭉 실행

    • 1 넣으면 만나서 반가워. 밥먹었니.잘가 다~ 나와
    • 2 를 넣으면 밥 먹었니랑 잘가가 나와
    • 아래 있는 걸 실행하는 게 아니라 그 안에서 멈출 수 있도록
      => break : 스위치를 빠져나가는 키워드
  • 문제점 2 : 다른 숫자를 넣어버리면?!

    • defalut : 그 이외의 것들을 모두 처리해주는 키워드
    • 밑에 더 이상 코드가 없으니까 브레이크 써도 되고 안 써도 돼
  • 최종 결과 코드로 한 번 적어보기

Scanner sc = new Scanner(System.in);
System.out.print("1.만나서반가워 2.밥먹었니? 3.잘가~");
int choice = sc.nextInt();
   
switch (choice) {
	case 1:
		System.out.println("만나서 반가워~~!");
		break;
	case 2:
		System.out.println("밥 먹었니?");
		break;
	case 3:
		System.out.println("잘가~");
		break;
	default:
		System.out.println("정확한 숫자를 입력해주세요.");


ㅇ 스위치를 쓰는 이유

  • 옛날에는 성능상의 이유로
    • 스위치는 해당되는 식이 정해지고 그 값으로 바로 이동할 수 있어 (점핑)
  • 조건문보다 속도가 쪼끔 빨라 (요즘은 비슷하니까 가독성 좋은 걸로 써~)
  • 물론 알고는 있어야겠지. 누군가가 쓰면 이해할 수 있어야 하니까
  • 값이 딱딱 떨어지는 경우에 스위치.  범위 조건은 줄 수 없어



ㅇ 실습1  :  숙제로 했었던 짝수, 홀수 결과 내기를 switch로 풀어보기

  • 식을 넣으니까 num%0만 넣는 거야
  • 흐름
    1정수를 위한 스캐너 필요
    2안내문적고, 정수형 변수에 저장
    3스위치를통해 판별하려면 넘을 넣어보려고 해
    num 안에 어떤 수가 들어갈지 몰라서 의미가 없어
    홀짝 판별하는 기준점은 어떤 수를 2로 나눴을 때 0,1로 홀짝을 판별할 수 있으니까
    이거 자체가 식이 돼 num%2를 넣으면 결과가 0 또는 1만 나와
    그래서 케이스 1은 홀수 0 짝수 되도록 출력문 써주면 끝

ㅇ 실습2 :  이제 아까 푼 학점 문제를 스위치로

  • 값만을 이용해야 하기 때문에 10으로 나눠서 십의 자리 수만 챙겨
Scanner sc = new Scanner(System.in);
System.out.print("점수 입력 : ");
int grade = sc.nextInt();
int i = grade/10;		

switch(i) {
	case 10:
	case 9 :
		System.out.println("A학점 입니다.");
		break;
	case 8 :
		System.out.println("B학점 입니다.");
		break;
	case 7 :
		System.out.println("C학점 입니다.");
		break;
	default :
		System.out.println("D학점 입니다.");
  • case 9,10 : 이런 문법도 가능 (위의 방법이 정석이긴 해)

CF. 컴마버전. 2018년에 생겼어. 이게 되는 게 자바 11버전부터. 자바 8버전은 안 돼
이클립스가 자바 15버전까지 커버하고 있어서 가능한거야

  • 기업들은 유료 사용자라서 언어가 업데이트 됐다고 바로 새로운 언어로 개발하지는 않아
    • 가장 많이 쓰는 버전은 1.6, 1.8 버전
  • 자바19년도는 var라는 자료형이 나와. 이게 모든 자료형 다 품는 것
  • 책 많이 읽기 - 언어도 새로운 기술 계속 나오는 거라서



ㅇ 실습 1단계 : 자판기 프로그램 만들기

  • switch 로
Scanner sc = new Scanner(System.in);
System.out.print("금액을 입력하세요. : ");
int money = sc.nextInt();
System.out.println("메뉴를 고르세요. 1.콜라(800원) 2.생수(500원) 3. 비타민워터(1500원) >>");
int choice = sc.nextInt();

switch (choice) {
		case 1:
			money -= 800;
			break;
		case 2:
			money -= 500;
			break;
		case 3:
			money -= 1500;
			break;
		default:
			System.out.println("정확한 숫자를 입력해주세요.");
System.out.println("잔돈 : " + money)
  • if문으로
if (choice == 1 ) {
		money -= 800;
	} else if (choice == 2) {
		money -= 500;
	} else if (choice == 3) {
		money -= 1500;
	}
System.out.println("잔돈 : " + money + "원");

ㅇ 실습 2단계 : 돈이 부족할 때 문제가 돼. 돈 부족하면 잔돈 100원은 그대로 돌려줘야 해

  • if속 if로
    • 추가로 입력한 가격이 부족하면 돈이 부족하다는 문장을 출력하기
if (choice == 1 ) {
	if (money>=800) {
		money -= 800;
	}else {
    System.out.println("돈이 부족해요");
    }
} else if (choice == 2) {
	if (money>=500) {
		money -= 500;
	}else {
    System.out.println("돈이 부족해요");
    }
} else if (choice == 3) {
	if (money>=1500) {
		money -= 1500;
	}else {
    System.out.println("돈이 부족해요");
    }
}
System.out.println("잔돈 : " + money + "원");

CF. if속 if 어렵다고 피하지 말고 마주하자! ㅜㅠ
나중에 이걸 쓸 수밖에 없는 상황들도 생길 거야!


ㅇ 실습 3단계 : 잔돈을 천원 ,오백원, 백원 단위로 돌려주자.

  • 이건 계속 했던 문제라서 답안 패스

ㅇ 내 풀이

if (choice == 1 && money >= 800) {
	money -= 800;
} else if (choice == 2 && money >= 500) {
	money -= 500;
} else if (choice == 3 && money >= 1500) {
	money -= 1500;
} else {
	System.out.println("돈이 부족해요ㅠㅠ");
}
int a = money / 1000;
int b = money % 1000 / 500;
int c = money % 500 / 100;
System.out.println("잔돈 : " + money);
System.out.println("천원 " + a + "개," + " 오백원 " + b + "개," + " 백원 " + c + "개");
	}
profile
STEP BY STEP

0개의 댓글

관련 채용 정보