[Java] switch~case문 / 반복문 / for문

2021. 1. 14. 20:20Dev.Program/Java & Spring

728x90

======== Ex.java 만들기

p.122

< switch ~ case 문 >

  • if문과 유사하게 조건에 따른 실행 문장을 달리하는 조건문
  • if문과 달리 조건식이 정수값, 문자열, Enum 상수 중 하나의 결과가 와야한다.
  • case 문에는 조건식 판별 결과와 비교할 값을 사용하며 범위 지정이 불가능하고, 값만 사용 가능
  • ⇒ 조건식 결과와 일치하는 case 문의 : 뒤에 있는 문장들을 차례대로 실행
  • case 문의 값은 중복될 수 없으며, 순서는 상관 없다
  • case 문 실행 후 break 문을 사용하여 switch ~ case 문을 빠져나갈 수 있으며, break 문이 없을 경우에는 조건과 상관없이 다음 case 문 또는 default 문을 모두 실행함(break 문을 만나거나 switch ~ case 문이 끝날때까지 실행)
  • default 문은 if 문의 else 문과 동일한 역할을 수행하며 일치하는 case 문이 없을 경우 default 문을 실행(default 문은 생략 가능)
  • if문은 실행 시점에서 조건을 판별하여 실행할 문장이 결정되지만, switch ~ case 문은 번역 시점에 실행할 문장이 결정되므로 실행 속도가 if문보다 빠름
  • if문이 switch ~ case 문보다 유연하므로 switch ~ case 문은 if문으로 100% 전환이 가능하지만 if문은 switch ~ case 문으로 전환이 불가능할 수 있다.


< 기본 문법 >

switch(조건식) {
    case 값1 : 
        // 조건식 결과가 값1 과 일치할 경우 실행할 문장들...
        [break;]
    case 값n : 
        // 조건식 결과가 값n 과 일치할 경우 실행할 문장들...
        [break;]
    [default : // 일치하는 case 문이 없을 경우 실행할 문장들... ]
}

결과값

 

  • break가 없어서 뒤 끝까지 다 실행됨.

break를 걸어주면

  • num 값인 3만 실행됨.

 

  • switch 까지 적고 Ctrl + Space 하면 이렇게 자동완성 됨.
  • ( ) 안에 값 넣고 tab 키 누르면 이런식으로 value 값으로 이동됨.

 

KOREA 출력됨.
char 타입도 가능! 0~65535 &rarr; 정수값이니까 넣을 수 있다. (똑같이 KOREA 출력)

 

 

======== Test.java

문제 )

등급을 정수형 변수로 관리하여

해당 등급에 따른 할인 금액을 계산

  • 등급 : 1(일반 회원), 2(VIP 회원), 3(VVIP 회원)
  • 할인율 : 일반 회원(5%), VIP 회원(15%), VVIP 회원(30%)

int grade = 3;

int pee = 50000;

 

> if 문을 사용하여 등급에 따른 할인율 적용하여 결제 금액 계산 후 출력 

푼 답
선생님 답안 : 추가적으로 회원등급 오류 적어줌ㅎㅎ



문제 ) switch ~ case 문을 사용하여 위와 동일한 작업 수행 

모르게따….

선생님 답안

 

======== Ex2.java

학점 계산하기. 를 switch ~ case 로 만들기.

원래대로라면 이렇게 노가다 해야됨!!

 

========Ttest2.java

문제 ) switch 조건식에 연산식이 들어갈 수 있는 걸 활용해서 더 간단하게 만들기.

푼 답 : 이것도 꽤 많이 적는다! 더 간단하게!
이렇게 break 를 지우면 중복된 부분 없어도 됨!

  • 어차피 break 가 없으면 전부 돌 테니까! (case0~case5 는 같은 결과값)
  • ⇒ 문장이 더 짧아진다ㅎㅎ

 

> 100이 넘어가면 case 10 이 오류가 나므로 그 부분은 if 문 사용

최종 코드!

  • 이렇게까지 짧아질 수 있다! 109 점, 108 점 이렇게 100점이 넘어가도 오류 안뜸!




======== Ex3.java

p.127

< 반복(loop)문 >

  • 특정 조건에 따라 문장 또는 블럭을 반복 실행하는 문
  •  for문, while문 으로 구분됨
  • ⇒ for문은 주로 반복횟수가 정해져 있는 반복문에 사용되며, while문은 주로 반복횟수가 정해져 있지 않은 반복문에 사용됨
  • 초기식, 조건식, 증감식, 실행문(블록)으로 구성됨

1. for문

  • 초기식, 조건식, 증감식의 위치가 정해져 있는 반복문(초심자에게 유리)

< 기본 문법 >

for(초기식; 조건식; 증감식) {
	// 조건식 결과가 true 일 때 반복 실행할 문장들...
}

 

for문을 사용하면 식이 간단해짐.
반복문 사용할때 (오른쪽 아래)여기 네모칸이 빨간색으로 켜져 있으면 안됨. (무한)




======== Test3.java

문제 ) 구구단 출력

정수형 변수 dan 이 2 일 경우 구구단 2단 출력

이렇게 하나하나 적어줘야됨.

 

문제 ) 이 문장을 for문을 사용하여 구구단 출력

푼 답
이렇게도 가능함. for 괄호 안에 값은 필요에 따라 생략가능.

  • 근데 정석대로 풀기

  • 이렇게 풀 경우 차이점! 종료 후 i 값이 10이 됨. (디버깅)

디버깅은 프로그램 실행 시 문제를 일으키는 오류, 즉 '버그'를 찾아 해결하고 수정하는 것을 의미합니다.

 

======= Ex4.java

p.127~

< 반복문을 사용한 연산의 누적 >

  • 연산(합계 등)을 누적할 변수를 하나 선언하여 반복문 내에서 해당 변수에 특정 연산 결과를 누적하여 적용
  • ⇒ 주의사항!
  • 누적 변수를 선언하는 위치는 반드시 반복문보다 윗쪽(앞쪽)에 위치해야한다!
  • 또한, 반드시 초기화 필수!

문제 ) 주석 처리된 부분을 for문으로 만들기. 

푼 답

  • 주의사항 ! 누적 연산 할 때는 누적변수는 안쪽에 만들면 안됨. 그럼 for 문이 돌아갈 때마다 0으로 초기화되어 마지막 10만 더해지기 때문에 결과값이 10이 나옴.
  • 누적 선언 변수는 무조건 반복문보다 위쪽(앞쪽)에 위치해야함.

 

======== Test4.java

문제 ) 정수 num 의 값이 1 ~ 10 까지 1씩 증가하면서 합계(total)를 누적 계산(안보고 해보기)

푼 답

 

응용문제 )

정수 i 의 값이 1 ~ 10 까지 1씩 증가하면서 홀수합계(oddTotal)를 계산

정수 i 의 값이 1 ~ 10 까지 1씩 증가하면서 짝수합계(evenTotal)를 계산



 

 

Test.java

문제 )

정수 1 ~ 100 사이에서 입력받은 두 숫자(num1, num2)의 공배수를 출력하고 합계 계산

ex) num1 = 5, num2 = 10 일 때

공배수 : 10, 20, 30, 40, 50, 60, 70, 80, 90, 100

합계 : 550

풀긴 풀었는데 제대로 못품ㅜㅜ 다시 연습해보기!!

 

Ex2.java 만들기

p.129

< 중첩 for문 >

  •  for문 내부에 또 다른 for문을 기술하는 것
  • 특정 작업의 반복에 대해서 다시 반복을 적용하여 중첩 반복을 수행할 때 사용
  • ex) 시계의 분 & 초 를 표현하거나, 200m 트랙을 10바퀴 도는 것
  • 중첩 for문 중에서 바깥쪽에 기술된 for문을 바깥쪽 for문이라고 하고, 안쪽에 기술된 for문을 안쪽 for문이라고 한다.
  • ⇒ 이 때, 안쪽 for문의 반복 횟수가 바깥쪽 for문 반복 횟수보다 많다.
  • (안쪽 for문 반복 횟수 = 안쪽 for문 반복 횟수 * 바깥쪽 for문 반복 횟수)

 < 기본 문법 >

for(초기식1; 조건식1; 증감식1) {
	문장1; // 바깥쪽 for문 반복 횟수만큼 반복

    for(초기식2; 조건식2; 증감식2) {
        문장2; 
        // 안쪽 for문 반복횟수만큼 반복 * 바깥쪽 for문 반복횟수만큼 반복
    }

    문장3; // 바깥쪽 for문 반복 횟수만큼 반복
}

< 실행 순서 >

초기식1 → 조건식1(true 일 때) → 문장1 → 초기식2 → 조건식2(true 일 때) → 문장2 → 증감식2 → 조건식2(반복) → 조건식2(false 일 때) → 문장3 → 증감식1 → 조건식1(반복) 

순서 잘 보기!

 

======== Test2.java

문제 ) 중첩 for 문을 사용한 시계의 분(min)침과 초(sec)침 구현

푼 답
이렇게 하면 00분 00초 이런 포맷형식 가능함.

 

문제 ) 중첩 for문을 사용하여 구구단 2단 ~ 9단까지 모두 출력

 

======== Ex3.java 만들기

문제 ) 중첩 for문에서 연산의 누적

주사위 2개 조합 경우의 수 출력 후 주사위 2개의 눈금 합계 계산

 

======== Test3.java 만들기

문제 ) 2개의 주사위를 던졌을 때 눈금의 합이 6이 되는 경우의 수 모두 출력

 

문제 ) 방정식 2x + 4y = 10의 모든 해를 구하시오.

단, x와 y는 정수이고 각각의 범위는 0 <= x <= 10, 0 <= y <= 10 이다.

 

728x90