중복 제거하는 법
- 값 중복
-> 변수 사용- 연산 중복
-> 1. 연속, 규칙이 있을 경우 - 반복문
-> 2. 연속x 규칙x - 범위 지정, 메서드 작성 등
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와 유사성)
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가 편함
상황을 판별하고 조건을 확인하는 일은 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 (초기값; 조건; 증감식){
명령문;
}
순서는 '초기값' 설정 -> '조건' 확인 -> '명령문' 수행 -> '증감' 연산 -> '조건' 확인 -> '명령문' 수행 -> ...
조건이 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); } } }
- 변하는 값 찾기 (증감연산자 or 대입연산자 찾기)
- 값의 변화를 표로 정리하기
반복문 작성하는 법
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문을 이용하여 간단히 만들기
- 풀어서 적어보기
- 공통점, 규칙 찾기
(수학에서 수열 문제-일반항 찾기와 비슷한듯)
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!");
}
전부 가능
(하지만 조건식은 대부분 적음)
반복문은 언제나 무한루프 주의 (반드시 어딘가에서는 탈출이 가능해야 함)
%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);
}
}
}