국가 교육 3일차 – JAVA(조건 연산자, 대입 연산자, 제어문, Switch문)


국비 교육의 진행 상황을 개인이 기록하는 데 사용됩니다.

0317(금)

=> 조건 연산자, 대입 연산자, 제어문, switch문


  • 논리 연산자 추가 예
package kr.s02.operator;

public class OperatorMain09 {
	public static void main(String() args) {
    int d, e;
		d = e = 10;
		
		/*
		 * boolean f = ++d > e++ || d++ >= ++e; 
		 * 			//11> 10(11:저장값) => true // ||(논리합)에서
		 * 선조건이 true이면 후조건은 실행하지 않는다.
		 */		
		boolean f = ++d < e++ || d++ >= ++e;
					//11< 10(11:저장값) => false =>후조건 실행
						//11(12:저장값) >= 12 => false
						// 논리합 결과 false
		
		System.out.println(d + "," + e);	//11,11	12,12
		System.out.println(f);	//true	false
    
    }
}

  • 조건부(삼항) 연산자

(절대값을 구하려면)

package kr.s02.operator;

public class OperatorMain10 {
	public static void main(String() args) {
	
		System.out.println("=== 조건(삼항)연산자 ===");
		
		int x = 10;
		int y = -10;
		
		//조건(삼항)연산자
				  //조건		참값	 거짓값
		int absX = (x >=0) ? x : -x;	//x의 절대값
		int absY = (y >=0) ? y : -y;	//y의 절대값
		
		System.out.println("x = 10일 때, x의 절대값은 " + absX);
		System.out.println("y = -10일 때, y의 절대값은 " + absY);
	}
}

(최소값과 최대값의 결정)

package kr.s02.operator;

public class OperatorMain11 {
	public static void main(String() args) {
		
		System.out.println("=== 조건(삼항)연산자 ===");
		
		int a = 5, b = 10;
		int max;	//최대값을 저장할 변수 선언
		int min;	//최소값을 저장할 변수 선언
		
		//조건(삼항)연산자
		max = a > b ? a : b;
		System.out.println("max = " + max);
		
		min = a < b ? a : b;
		System.out.println("min = " + min);
	}
}

(대소문자 구분)

package kr.s02.operator;

public class OperatorMain12 {
	public static void main(String() args) {
		
		System.out.println("=== 조건(삼항)연산자 ===");
		
		char ch="b";
		String s;	//대문자인지 판단한 결과를 저장할 문자열 변수 선언
		
		//조건(삼항)연산자
			//조건					 참값			거짓값
		//s = (ch >= 65 && ch <= 90) ? "대문자임" : "대문자가 아님";	//아스키코드를 이용
			//논리연산자를 통해 범위 설정가능 (n부터 n+?? 까지)
		s = (ch >= 'A' && ch <= 'Z') ? "대문자임" : "대문자가 아님";
			//자동 형변환이 되어서 비교가 가능하게됨
		
		System.out.println(ch + "=>" + s);		
	}
}

  • 작업 관리자
package kr.s02.operator;

public class OperatorMain13 {
	public static void main(String() args) {
		
		System.out.println("=== 대입 연산자 ===");
		int a = 5;
		int b = 7;
		
		a += b; // a = a + b, +=는 하나의 연산자 이므로 사이에 공백이 있으면 안된다. + =(x)
		System.out.println("a += b : " + a);
		
		a -= b;	//a = a - b
		System.out.println("a -= b : " + a);
		
		a *= b;	//a = a * b
		System.out.println("a *= b : " + a);
		
		a /= b;	//a = a / b
		System.out.println("a /= b : " + a);
		
		a %= b;	//a = a % b
		System.out.println("a %= b : " + a);	
	}
}


(운영자 연습)

package kr.s02.operator;
/*
 * (실습)
 * A전자 대리점에서는 그날 물건 판매액의 15%를 할인해주기로 했습니다.
 * 판매한 상품명과 상품의 단가와 수량을 키보드로 입력받아서
 * 지불 금액을 출력하는 프로그램을 작성하시오.
 * (단, 출력시에는 소수점이하는 절삭)
 * 
 * (입력 및 출력예시)
 * 상품명 입력 : 냉장고
 * 단가 입력 : 500000
 * 판매 수량 입력 : 3
 * 냉장고 3대의 가격은 1,275,000원 이다.
 * 
 */
public class OperatorMain14 {
	public static void main(String() args) {
		java.util.Scanner input = new java.util.Scanner(System.in);
		//숫자(정수) 입력 : input.nexInt()
		//문자열 입력 : input.nexLine()
		
	
		System.out.print("상품명 입력 : ");
		String name = input.nextLine();
		
		System.out.print("단가 입력 : ");
		int price = input.nextInt();
		
		System.out.print("판매 수량 입력 : ");
		int num = input.nextInt();
		
		int total = (int)((price - (price * 0.15)) * num);
		
		//예제 코드
		//int total = (int)(price * num * 0.85) 
		//int total = price * num * 85/100	//정수형들의 연산으로 형변환을 할 필요가 없다.
		
		System.out.println("===============");
		System.out.printf("%s %d대의 가격은 %,d원 ", name, num, total);
		
		input.close();
	}
}

(할당 연산자 사용 예)

package kr.s02.operator;

public class OperatorMain15 {
	public static void main(String() args) {
		java.util.Scanner input = new java.util.Scanner(System.in);
		//대입연산자를 사용하는 은행 프로그램
		
		int balance = 0; //잔고
		
		System.out.print("예금액>");
		balance += input.nextInt();	//누적
		
		System.out.printf("잔고 : %,d원%n", balance);
		
		System.out.print("출금액>");
		balance -= input.nextInt();	//차감
		
		System.out.printf("잔고 : %,d원%n", balance);
		
		input.close();
	}
}

+=, -=가 조금 더 자주 사용됩니다.


  • 세금 신고
만약에
블록 내부 집행 선언 하나 줄이면 {}차단하다 나가다 숫자 존재했다
그렇지 않으면
상태 진실반대편 만약에 블록의 집행 선언 실행, 상태 잘못된반대편 다른 블록의 실행 선언 실행
여러 경우 3가지 이상의 조건이 있는 경우

(단일 if 문의 예)

package kr.s03.operation;

public class IfMain01 {
	public static void main(String() args) {
		System.out.println("===단일 if문 ===");
		
		int n = 10;
		
		//단일if문 : 조건이 ture이면 if블럭안의 수행문을 실행
		if(n>5) {	//if블럭 시작
			System.out.println("n은 5보다 크다"); 
		}//if블럭 끝
		
		System.out.println("===============");
		
		//if블럭내의 수행문이 한 줄이면 {}블럭을 생략할 수 있음
		if(n<5)
			System.out.println("~~~~~~~");
		
		System.out.println("프로그램 종료!");
	}
}

(if~else 문의 예시 – 짝수와 홀수 구분)

package kr.s03.operation;

public class IfMain02 {
	public static void main(String() args) {
		java.util.Scanner input = new java.util.Scanner(System.in);
		
		System.out.println("===if ~ else ===");
		
		System.out.print("정수 한 개 입력: ");
		int a = input.nextInt();
		
		//if~else : 조건이 true이면 if 블럭의 수행문을 실행, 조건이 false이면 else 블럭의 수행문을 실행
		if(a%2 == 1) {
			System.out.println("홀수입니다.");
		}else {
			System.out.println("짝수입니다.");
		}
		input.close();
	}
}

(양수와 음수를 0으로 구분하는 다중 if 문의 예)

package kr.s03.operation;

public class IfMain03 {
	public static void main(String() args) {
		java.util.Scanner input = new java.util.Scanner(System.in);
		
		System.out.println("===다중 if문 ===");
		
		System.out.print("정수 한 개 입력: ");
		int a = input.nextInt();
		
		//다중 if문
		if(a>0) {
			System.out.println(a+ "는 양수입니다.");
		}else if(a<0) {
			System.out.println(a + "는 음수입니다.");
		}else {
			System.out.println("0 입니다.");	
		}
		input.close();	
	}
}

(여러 if 문 증언의 예)

package kr.s03.operation;

//성적표 프로그램
public class IfMain04 {
	public static void main(String() args) {
		java.util.Scanner input = new java.util.Scanner(System.in);
		
		int score;
		char grade;
		
		System.out.print("성적 입력> ");
		score = input.nextInt();
		
		if(score >=90 && score <= 100 ) {
			grade="A";
			
		}else if(score >= 80 && score <= 89) {
			grade="B";
			
		}else if(score >= 70 && score <= 79) {
			grade="C";
			
		}else if(score >= 60 && score <= 69) {
			grade="D";
			
		}else if( score >= 0 && score <= 59) {
			grade="F";
			
		}else {
			grade="?";
		}
		
		System.out.printf("성적 : %d%n", score);
		System.out.printf("등급 : %c%n", grade);
		
		input.close();
	}
}

(비교 연산자 if 문 사용 예)

package kr.s03.operation;

public class IfMain05 {
	public static void main(String() args) {
		
		int a = 10;
		float b = 10.0f;
		
		if(a == b) {	//a의 자료형이 int -> float으로 자동 형변환
			System.out.println("10과 10.0f는 같다");
		}
		
		char c="0";	//'0'의 아스키 코드 48
		int d = 0;
		
		if(c != d) {	//c는 int로 형변환되어 48로 인식
			System.out.println("'0'과 0은 같지 않다.");
		}
		
		char e="A"; //'A'는 아스키 코드 65
		int f = 65;
		if(e == f) {	//e는 int로 형변환되어 65로 인식
			System.out.println("'A'는 65와 같다");
			
		}
	}
}

(지시 연습의 경우)

package kr.s03.operation;
/*
 * (실습)
 * 정수 하나를 입력하여 짝수면 10을 더하고 홀수이면 20을 더해 결과값을 출력하시오.
 * 
 * (입력 예시)
 * 정수 하나 입력> 5
 * 
 * (출력 예시)
 * 결과 : 25
 */

public class IfMain06 {
	public static void main(String() args) {
		java.util.Scanner input = new java.util.Scanner(System.in);
		
		System.out.print("정수 하나 입력> ");
		int num = input.nextInt();
		
		if((num % 2) == 0) {	//짝수
			num += 10;
		
		}else{	//홀수
			num += 20;	
			
		}
		System.out.printf("결과 : %d", num);
		
		/*(예시 코드)
		 * 
		 * int result;
		 * if((num % 2) == 0) {
		 * 	result = num + 10;
		 * }else{
		 * 	result = num + 20;
		 * }
		 * 
		 * System.out.printf("결과 : %d", result);
		 */
		input.close();
	}
}

(if 문 연습 2, 조건(삼항) 연산자 예제, if 문의 변경))

package kr.s03.operation;
/*
 * (실습)
 * 정수 두 개를 입력 받아서 변수에 저장하고 
 * 두 값 중 최대값과 최소값을 구하여 최대값과 최소값을 출력하시오
 * (단, 같은 숫자를 입력하면 " 두 수는 같다"가 출력된다.)
 * 
 * (입력 예시)
 * 첫번째 정수 입력:2
 * 두번째 정수 입력:3
 * 
 * (출력 예시)
 * 최대값 : 3
 * 최소값 :2
 */

public class IfMain07 {	//조건(삼항)연산자 예제 if문으로 바꿔 작성해보기
	public static void main(String() args) {
		java.util.Scanner input = new java.util.Scanner(System.in);
		
		System.out.print("첫번째 정수 입력 : ");
		int num1 = input.nextInt();
		
		System.out.print("두번째 정수 입력 : ");
		int num2 = input.nextInt();
		
		if(num1 > num2) {
			System.out.printf("최대값 : %d%n", num1);
			System.out.printf("최소값 : %d%n", num2);
			
		}else if(num1 < num2) {
			System.out.printf("최대값 : %d%n", num2);
			System.out.printf("최소값 : %d%n", num1);
			
		}else if(num1 == num2) {
			System.out.println("두 수는 같다");
		}
		
		input.close();
	}
}

(if 문 연습 3, 3개의 정수를 비교하여 최소값과 최대값을 찾습니다)

package kr.s03.operation;
/*
 * (실습)
 * 입력받은 3개의 정수 중 최대값, 최소값을 구하시오.
 */

public class IfMain08 {
	public static void main(String() args) {
		java.util.Scanner input = new java.util.Scanner(System.in);
		
		int min, max;
		
		System.out.print("첫번째 정수 입력 : ");
		int num1 = input.nextInt();
		
		System.out.print("두번째 정수 입력 : ");
		int num2 = input.nextInt();
		
		System.out.print("세번째 정수 입력 : ");
		int num3 = input.nextInt();
		
		if(num1 > num2 && num1 > num3) {	//최대값이 num1일 때
			max = num1;
			if(num2 > num3) {
				min = num3;
			}else {
				min = num2;
			}
		}else if(num2 > num1 && num2 > num3) {	//최대값이 num2일 때
			max = num2;
			if(num1 > num3) {
				min = num3;
			}else {
				min = num1;
			}
		}else {		//최대값이 num3일 때
			max = num3;
			if(num1 > num2) {
				min = num2;
			}else {
				min = num1;
			}
		}
		
//		//예제코드
//		
//		//최대값 구하기
//		max = num1;	//조건 체크를 위한 기준값
//		if(num2 > max) max = num2;
//		if(num3 > max) max = num3;
//		
//		//최소값 구하기
//		min = num1;	//조건 체크를 위한 기준값을 설정
//		if(num2 < min) min = num2;
//		if(num3 < min) min = num3;
		
		System.out.println("최대값 : " + max + ", 최소값 : " + min + "이다.");
		input.close();
	}
}

; 세 개의 정수를 비교하여 최대값과 최소값을 찾는 연습을 했습니다. 먼저 num1, num2, num3이 최대값인 경우로 나누어 if문을 작성하고 나머지 두 개의 Compare 정수를 이용하여 최소값을 찾기 위해 다시 if문을 사용했습니다.

수술 결과 결과는 순조롭게 나왔지만 교육이 끝나고 강사님이 주신 코드를 보고 단축할 수 있는 방법이 있다는 것을 알게 되었습니다.

최대한 간결하게 코드를 작성하기 위해 공부하고 연습해야 할 필요성을 느꼈습니다….!!!!

  • switch 문

조건값이 true 또는 false인 if 문과 달리 switch 문의 조건값은 정수형(byte, short, int)이거나 long형 이외의 char형이다. 문자열은 JDK7.0 이상에서도 지원됩니다.

(조건 – 정수인 경우의 예)

package kr.s03.operation;

public class SwitchMain01 {
	public static void main(String() args) {
		java.util.Scanner input = new java.util.Scanner(System.in);
		
		System.out.println("=== switch문 ===");
		//switch의 인자값은 long형을 제외한 정수형
		//(byte, short, int), char, 문자열 사용 가능
		
		System.out.print("정수 입력> ");
		int a = input.nextInt();
		
		switch(a) {
		case 1:
			System.out.println("1 입력");
			break;	//switch 블럭을 빠져나감
		case 2:
			System.out.println("2 입력");
			break;	//switch 블럭을 빠져나감
		case 3:
			System.out.println("3 입력");
			break;	//switch 블럭을 빠져나감
		default :
			System.out.println("1, 2, 3이 아닌 숫자 입력");
		}
		
		input.close();
		
		//break를 주석처리후 실행하니 모든 케이스의 수행문이 출력됨
	}
}

(조건 – 텍스트 예시)

package kr.s03.operation;

public class SwitchMain02 {
	public static void main(String() args) {
		java.util.Scanner input = new java.util.Scanner(System.in);
		
		System.out.println("=== switch문 ===");
		
		System.out.print("계절 입력> ");
		//next() : 봄 여름 -> 봄 만 반환한다. 공백이 있는 문자열 공백부터 삭제됨
		//nextline() : 봄 여름 -> 봄 여름 반환, 한 라인의 데이터 반환
		
		String season = input.nextLine();
		
		switch(season) {
		case "봄":
			System.out.println("꽃이 피는 계절");
			break;
		case "여름":
			System.out.println("뜨거운 태양의 계절");
			break;
		case "가을":
			System.out.println("산들바람이 부는 계절");
			break;
		case "겨울":
			System.out.println("눈이 내리는 계절");
			break;
		default:
			System.out.println("없는 계절");
			
		input.close();
		}
	}

(인증서 예시)

package kr.s03.operation;

public class SwitchMain03 {
	public static void main(String() args) {
		java.util.Scanner input = new java.util.Scanner(System.in);
		
		int score;
		char grade;
		
		//switch는 80~90점 처럼 구간 비교 불가능 
		System.out.print("성적 입력> ");
		score = input.nextInt();
		
		/*
		 * switch(score){ 
		 * case 100: 
		 * 	grade="A"; 
		 * 	break; 
		 * case 99: 
		 * 	grade="A";	
		 * 	break; }
		 * 너무 많은 구간 필요 프로그램으로써 의미 xxxx
		 */
		if(score<0 || score >100) {
			System.out.println("성적은 0~100만 입력 가능합니다.");
			System.exit(0); //프로그램 종료
		}
		
		switch(score / 10) {		//(정수 / 정수) => 정수
		case 10:
//			grade="A";
//			break;
		case 9:
			grade="A";
			break;
		case 8:
			grade="B";
			break;
		case 7:
			grade="C";
			break;
		case 6:
			grade="D";
			break;
		default:
			grade="F";
		}
		
		System.out.println();	//단순 줄바꿈
		System.out.printf("성적 : %d%n", score);
		System.out.printf("등급 : %c%n", grade);
		
		input.close();
	}
}

등급간격을 나누어서 등급을 알려주는 프로그램을 작성하려고 하면 switch 문에 너무 많은 간격이 필요하여 프로그램으로서의 가치가 떨어집니다.

간격을 단순화하기 위해 점수를 10으로 나누어 간격을 다음과 같이 표현합니다.

100 10으로 나누기 10
90-99 9
80-89 8일
70-79 7
60-69 6

Case 10과 Case 9의 실행 코드는 동일한 내용이므로 Case 10의 코드를 삭제하여 Case 9의 코드 내용을 공유한다.