국비 교육의 진행 상황을 개인이 기록하는 데 사용됩니다.
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의 코드 내용을 공유한다.