728x90
반응형
연산자
대입, 산술 연산자
- 대입 연산자 ( = )
- 변수에 값을 대입하는 연산자
- ex) int num = 10;
- 산술 연산자 ( +, - , * , / , % )
- 나눗셈 주의
- 나눗셈 ( / ) : 몫을 반환함
- MOD ( % ) : 나머지를 반환함
- 나눗셈 주의
증가, 감소 연산자(++, —)
- 전위 연산자
- ex) ++num
- 후위 연산자
- ex) num++
int num = 10;
int result = 0;
result = num++;
// result = 10 , num = 11;
// 해당 연산이 완료된 뒤에 num이 1 증가
int num2 = 100;
int result2 = 0;
result2 = ++num;
// result2 = 101 , num2 = 101
// 먼저 num2를 1 증가 한 후 result2 에 대입
관계 연산자
- > , < , >= , <= , == , !=
- 두 항의 비교 결과를 true 와 false 중 하나로 반환한다. (논리형 데이터 타입)
논리 연산자
- 두 명제의 결과를 연산하여 true or false 로 반환하는 논리형 데이터 타입
- && 논리 연산자
- 하나라도 false 면 false를 반환
- 모두 true 이어야만 true를 반환
- || 논리 연산자
- 하나라도 true 면 true를 반환
- 모두 false 이어야만 false를 반환
- ! 논리 연산자
- 느낌표 다음에 나오는 조건이 true면 false 를 반환
- 느낌표 다음에 나오는 조건이 false면 true 를 반환
복합 관계 연산자
- += , -= , *= , /= , %=
- 대입 연산자와 다른 연산자를 조합해 하나의 연산자처럼 사용
삼항 연산자
- ( 조건식 ? true의 결과 : false의 결과 )
int num = 100;
char result;
result = (num > 50) ? 'T' : 'F';
// num이 50 보다 크면 (true면) result에 'T' 문자를 대입.
// 아니면 (false 면) 'F'문자를 대입
Example03 : 변수 값의 교환
import java.util.Scanner;
public class Example03 {
public static void main(String[] args) {
/*
* 변수의 교환
* (직접적인 값의 대입이 아닌 변수를 통한 값 이동할 것)
* 출력 결과 :
* 교환 전
* x = 100
* y = 200
* 교환 후
* x = 200
* y = 100
*/
// Scanner sc = new Scanner(System.in);
// int x = sc.nextInt();
// int y = sc.nextInt();
int x = 100;
int y = 200;
// 데이터 타입이 일치 한다면
// int x = 100, y = 200;
// 으로 선언 가능!
System.out.println("교환 전 x 값은 " + x + " 이고, 교환 전 y 값은 " + y + " 입니다.");
// 임시 저장 변수로 tmp 를 사용함. temporary ~
int tmp = y;
y = x;
x = tmp;
System.out.println("교환 후 x 값은 " + x + " 이고, 교환 전 y 값은 " + y + " 입니다.");
}
}
Operator1 : 산술 연산자
public class Operator1 {
public static void main(String[] args) {
// 산술 연산자
int a = 6, b = 4;
System.out.println(a + " + " + b + " = " + (a+b));
System.out.println(a + " - " + b + " = " + (a-b));
System.out.println(a + " * " + b + " = " + (a*b));
// 6 / 4 의 몫은 1.
System.out.println(a + " / " + b + " = " + (a/b));
// a를 실수형 타입의 float로 형변환을 하니, 1.5 값이 나온다.
// float이 int 보다 큰 범위이므로 강제 형변환 발생
System.out.println(a + " / " + b + " = " + ((float) a/b));
System.out.println("--- % 연산자 ---");
System.out.println(a + " % " + b + " = " + (a%b)); // 2
System.out.println("7 % 3 = " + 7 % 3); // 1
System.out.println("14 % 2 = " + 14 % 2); // 0
}
}
Operator2 : 대입 연산자, 관계 연산자, 복합 관계 연산자
public class Operator2 {
public static void main(String[] args) {
// 대입 연산자
int a, b, c, sum;;;
a = 3; b = 4; c = 5;
sum = a + b + c;
System.out.println("a, b, c의 합은 " + sum);
System.out.println("-------------");
// 관계 연산자
int num = 10;
System.out.println(num > 3);
System.out.println(num < 3);
System.out.println(num >= 3);
System.out.println(num <= 3);
System.out.println(num == 3);
System.out.println(num != 3);
System.out.println("-------------");
// 복합 관계 연산자
int num2 = 3;
System.out.println(num2 += 3); // num2 = num2 + 3 와 동일
System.out.println(num2 -= 3);
System.out.println(num2 *= 3);
System.out.println(num2 /= 3);
System.out.println(num2 %= 3);
}
}
Operator3 : 증감 연산자, 부호 연산자, 문자열 연결
public class Operator3 {
public static void main(String[] args) {
// 증감 연산자
int value = 2;
int a = ++value; // 전위 연산자
// 1 증가 연산한 뒤에 증가한 3을 a 에 대입
System.out.println("value = " + value + " , a = " + a);
value = 2;
a = value++; // 후위 연산자
// 원래 값인 2를 a에 대입한 뒤에 1 증가 연산
System.out.println("value = " + value + " , a = " + a);
System.out.println("-----------");
// 부호 연산자
int value2 = 8;
System.out.println(value2);
value2 = -value2;
System.out.println(value2);
System.out.println("-----------");
// 문자열 연결
System.out.println(4 + 5); // 숫자간 연산
System.out.println("영구와 " + "땡칠이"); // 공백 포함 문자열 연산
System.out.println("응답하라 " + 1989); // 문자열과 숫자 연산
System.out.println(19 + 89 + " 응답하라"); // 연산 처음부터 연속된 숫자끼리는 더하기 연산 실행
System.out.println(19 + "89" + " 응답하라");
System.out.println("19" + "89" + " 응답하라");
System.out.println("" + 19 + 89 + " 응답하라"); // "" + 19의 결과가 이미 문자열이 됨
System.out.println("" + (19 + 89) + " 응답하라"); // 괄호 속 연산 처음부터 숫자 연산
System.out.println("-----------");
double root = 1.414;
System.out.println("2의 제곱근: " + root);
}
}
Operator4 : 논리 연산자
public class Operator4 {
public static void main(String[] args) {
// 논리 연산자
int num1 = 10;
int num2 = 20;
// and &&
boolean flag = (num1 > 0) && (num2 > 2);
// true && true 이므로 flag는 true
System.out.println(flag);
flag = (num1 < 0) && (num2 > 0);
// false && true 이므로 flag는 false
System.out.println(flag);
System.out.println("-------------");
// or ||
flag = (num1 < 0) || (num2 > 0);
// false || true 이므로 flag는 true
System.out.println(flag);
System.out.println("-------------");
// not ! (부정)
System.out.println(!flag);
System.out.println(!true);
System.out.println("-------------");
// 논리 연산자의 함정 : 단축 평가
int num = 10;
int i = 2;
boolean value = ((num = num + 10) < 10) && ((i = i + 2) < 10);
// 이미 ((num = num + 10) < 10) 이 false 이므로
// 어차피 false이므로 뒤의 연산은 아예 진행조차 되지 않는다.
// 그래서 num의 값은 바뀌지만, i의 값은 연산이 되지 않았으므로 그대로이다.
System.out.println(value); // false
System.out.println(num); // 20
System.out.println(i); // 2
System.out.println("-------------");
int num3 = 10;
int i3 = 2;
boolean value3 = ((num3 = num3 + 10) > 10) || ((i3 = i3 + 2) > 10);
// 이미 ((num3 = num3 + 10) > 10) 이 true 이므로
// 어차피 true이므로 뒤의 연산은 아예 진행조차 되지 않는다.
// 그래서 num3의 값은 바뀌지만, i3의 값은 연산이 되지 않았으므로 그대로이다.
System.out.println(value3); // true
System.out.println(num3); // 20
System.out.println(i3); // 2
}
}
Operator5 : 조건 연산자, 삼항 연산자
package chapter02.operator;
import java.util.Scanner;
public class C017_Operator5 {
public static void main(String[] args) {
// 조건 연산자 & 삼항 연산자
// 조건식 ? 결과1 : 결과2
int fatherAge = 45;
int motherAge = 47;
String result = (fatherAge > motherAge) ? "아빠가 연상" : "엄마가 연상";
System.out.println(result);
System.out.println("--------------");
// 아빠, 엄마의 나이를 입력으로 받아 출력하세요.
Scanner sc = new Scanner(System.in); // 스캐너 호출
fatherAge = sc.nextInt(); // 아빠 나이 입력
motherAge = sc.nextInt(); // 엄마 나이 입력
int diff = fatherAge - motherAge; // 나이 차이 계산
// 아빠가 연상이면 나이차를 그대로 반환
// 엄마가 연상이면 나이차에서 ( - ) 붙여서 반환
System.out.println((fatherAge > motherAge) ? "아빠가 " + diff + " 살 더 연상입니다." : "엄마가 " + (-diff) + " 살 더 연상입니다.");
}
}
Oper_Example01 : 거스름돈 계산
import java.util.Scanner;
public class Oper_Example01 {
public static void main(String[] args) {
/*
* 상품 가격과 받은 금액을 입력 받아서 거스름돈을 출력
* 출력 결과 :
* 받은 금액 : 10000
* 상품 가격 : 1500
* 거스름돈 : 8500
*/
Scanner sc = new Scanner(System.in);
System.out.println("받은 금액 : ");
int input = sc.nextInt();
System.out.println("상품 가격 : ");
int price = sc.nextInt();
int charge = input - price;
System.out.println(charge);
// 거스름돈이 0 이상이면 거스름돈 출력
// 음수면 부족하다고 출력
System.out.println((charge >= 0) ? "거스름돈은 " + charge + " 원 입니다." : (-charge) + " 원이 부족합니다.");
}
}
Oper_Example02 - 1 : 성적 과락 및 합격 여부
import java.util.Scanner;
public class Oper_Example02 {
public static void main(String[] args) {
/*
* 과목 3개를 입력받아 점수에 따른 합격 여부를 출력한다.
* 합격 조건 :
* 1. 세 과목의 평균 점수가 60점 이상일 것.
* 2. 한 과목이라도 40점 미만일 경우 과락으로 불합격
* 출력 결과 :
* 국어 : 80
* 영어 : 80
* 수학 : 35
* 합격여부 : false
*/
Scanner sc = new Scanner(System.in);
int korean = 0, english = 0, math = 0;
System.out.println("국어 점수 : ");
korean = sc.nextInt();
System.out.println("영어 점수 : ");
english = sc.nextInt();
System.out.println("수학 점수 : ");
math = sc.nextInt();
boolean isPassed = (((korean + english + math) / 3) >= 60) && (korean >= 40) && (english >= 40) && (math >= 40);
System.out.println("국어 : " + korean +
"\\n영어 : " + english +
"\\n수학 : " + math +
"\\n합격여부 : " + ((isPassed) ? "합격하신 것을 축하합니다!" : "불합격하셨습니다."));
System.out.printf("국어 : %d\\n영어 : %d\\n수학 : %d\\n합격여부 : %s", korean, english, math, (isPassed) ? "합격하신 것을 축하합니다!" : "불합격하셨습니다.");
}
}
Oper_Example02 - 2 : 성적 과락 및 합격 여부
import java.util.Scanner;
public class Oper_Example02 {
public static void main(String[] args) {
/*
* 과목 3개를 입력받아 점수에 따른 합격 여부를 출력한다.
* 합격 조건 :
* 1. 세 과목의 평균 점수가 60점 이상일 것.
* 2. 한 과목이라도 40점 미만일 경우 과락으로 불합격
* 출력 결과 :
* 국어 : 80
* 영어 : 80
* 수학 : 35
* 합격여부 : false
*/
Scanner sc = new Scanner(System.in);
System.out.println("국어 점수 : ");
int kor = sc.nextInt();
System.out.println("영어 점수 : ");
int eng = sc.nextInt();
System.out.println("수학 점수 : ");
int math = sc.nextInt();
// int의 합은 int
// int와 3.0(double)을 연산 시 더 큰 범위인 double로 자동 형변환
double avg = (kor + eng + math) / 3.0;
boolean result = (avg >= 60) && (kor >= 40) && (eng >= 40) && (math >= 40);
System.out.println("합격 여부 : " + result);
}
}
Oper_Example03 - 3 가지 풀이 (나눗셈, MOD, 반복문) : 각 자릿수 합 계산
import java.util.Scanner;
public class Oper_Example03 {
public static void main(String[] args) {
/*
* 각 자리수의 합 구하기
* 출력 결과:
* 0~999 사이의 정수를 입력하세요
* 315
* 각자리수의 합 : 9
*/
// 1 번째 풀이 : 나눗셈(/) 을 이용한 풀이
Scanner sc = new Scanner(System.in);
System.out.println("0 ~ 999 사이의 정수를 입력하세요");
int num = sc.nextInt(); // 315
int hundred = num / 100; // 3
num -= hundred * 100; // 15
int ten = num / 10; // 1
num -= ten * 10; // 5
int one = num; // 5
int sum = hundred + ten + one;
System.out.println("각 자릿수의 합 : " + sum);
System.out.println("--------");
// 2 번째 풀이 : MOD(%) 나머지를 이용한 풀이
System.out.println("0 ~ 999 사이의 정수를 입력하세요");
int num2 = sc.nextInt(); // 315
int one2 = num2 % 10; // 5
num2 /= 10; // 31
int ten2 = num2 % 10; // 1
num2 /= 10; // 3
int hundred2 = num2 % 10; // 3
int sum2 = one2 + ten2 + hundred2;
System.out.println(sum2);
System.out.println("--------");
// 3 번째 풀이 : 반복문(for) 사용
System.out.println("0 ~ 999 사이의 정수를 입력하세요");
int num3 = sc.nextInt();
int sum3 = 0;
for(int i = 0; i < 3; i++) {
sum3 += num3 % 10;
num3 /= 10;
}
System.out.println("각 자리수의 합 : " + sum3);
}
}
Oper_Example03 - num 변수 보존 : 각 자릿수 합 계산
import java.util.Scanner;
public class Oper_Example03 {
public static void main(String[] args) {
/*
* 각 자리수의 합 구하기
* 출력 결과:
* 0~999 사이의 정수를 입력하세요
* 315
* 각자리수의 합 : 9
*/
// 1 번째 풀이 : 나눗셈(/) 을 이용한 풀이
Scanner sc = new Scanner(System.in);
System.out.println("0 ~ 999 사이의 정수를 입력하세요");
int num = sc.nextInt(); // 315
int num100 = num / 100; // 3
int num10 = num % 10 / 10; // 1
int num1 = num % 100 % 10; // 5
int sum = num100 + num10 + num1;
System.out.println("각 자릿수의 합 : " + sum);
}
}
Oper_Example04 : 삼항연산자 세 번 사용 - 세 개 정수 정렬
import java.util.Scanner;
public class Oper_Example04 {
public static void main(String[] args) {
/*
* 정수 3개를 입력 받아 각 변수 (a, b, c)에 값을 넣고,
* 입력 받은 값 중 최대값(max)을 출력하세요.
* (입력값의 순서에 상관없이 최대값이 출력되어야함)
* hint. 삼항 연산자(중복 사용)
* 출력 결과 :
* 첫번째 정수 : 2
* 두번째 정수 : 4
* 세번째 정수 : 1
* 최대값 : 4
*
*/
System.out.println("정수 3개를 입력해주세요.");
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
// 먼저 a와 b를 비교
// a가 크다면 ((a > c) ? a : c) 부분으로 가서 a와 c를 비교
// a와 c 중 큰 값을 반환
// b가 크다면 ((b > c) ? b : c) 부분으로 가서 b와c를 비교
// b와 c 중 큰 값을 반환
int max = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
System.out.println("첫번째 정수 : " + a);
System.out.println("두번째 정수 : " + b);
System.out.println("세번째 정수 : " + c);
System.out.println("최대값 : " + max);
sc.close();
}
}
Oper_Example04 : 삼항연산자 두 번 사용 - 세 개 정수 정렬
import java.util.Scanner;
public class Oper_Example04 {
public static void main(String[] args) {
/*
* 정수 3개를 입력 받아 각 변수 (a, b, c)에 값을 넣고,
* 입력 받은 값 중 최대값(max)을 출력하세요.
* (입력값의 순서에 상관없이 최대값이 출력되어야함)
* hint. 삼항 연산자(중복 사용)
* 출력 결과 :
* 첫번째 정수 : 2
* 두번째 정수 : 4
* 세번째 정수 : 1
* 최대값 : 4
*
*/
System.out.println("정수 3개를 입력해주세요.");
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
int max = (a > b && a > c) ? a : ((b > c) ? b : c);
System.out.println("첫번째 정수 : " + a);
System.out.println("두번째 정수 : " + b);
System.out.println("세번째 정수 : " + c);
System.out.println("최대값 : " + max);
sc.close();
}
}
728x90
반응형