고래씌
[JAVA] 3. 연산자(산술연산자, 증감연산자, 복합연산자, 논리부정연산자, 비교연산자, 논리연산자, 삼항연산자) 본문
[JAVA] 3. 연산자(산술연산자, 증감연산자, 복합연산자, 논리부정연산자, 비교연산자, 논리연산자, 삼항연산자)
고래씌 2023. 10. 4. 12:501. 산술연산자
: 산술연산자(이항연산자 == 두개의 값을 가지고 연산)
→ * / % + -
package com.kh.operator;
public class A_Arithmetic {
public void method() {
int num1 = 10;
int num2 = 3;
System.out.println("num1 + num2 = " + (num1+num2));
// num1 + num2 로 출력해버리면 String처럼 각각의 숫자 10과 3을 찍기때문에 103이 출력됨.
// 괄호로 묶어서 먼저 산술연산처리를 해줘야함
System.out.println("num1 - num2 = " + (num1-num2));
// 뺄셈은 괄호로 묶어주지 않는 경우 숫자로 인식하기 때문에 에러발생
System.out.println("num1 * num2 = " + num1 * num2);
System.out.println("num1 * num2 = " + num1 / num2);
System.out.println("num1 * num2 = " + num1 % num2);
// 곱셋, 나눗셈, 모듈러 연산의 경우 +, - 보다 우선순위가 더 높기 때문에 괄호로 묶어주지 않아도 정확한 결과가 나옴
// 가독성을 위해 연산시에는 괄호로 묶는 것 권장
// System.out.println(10 / 0); => 에러 발생함
// ArithmeticException : by zero 라는 오류 발생
// 수학과 마찬가지로 0으로 나누기는 불가능
double a = 35; // 35.0
double b = 10; // 10.0
System.out.println(a / b); // 3.5
System.out.println(a % b); // 5.0
}
}
2. 증감연산자(단항연산자) ++ --
1) ++ : 변수에 담긴 값을 1 증가시키는 연산자
++변수, 변수++ == > (전위연산자) , (후위 연산자)
2) -- : 변수에 담긴 값을 1 감소시키는 연산자
--변수, 변수--
(증감연산자)변수 : 전위연산 -> 선증감 후처리
변수(증감연산자) : 후위연산 -> 선처리 후증감
ex) int num 1;
num = num + 1; // num++
public void method1() {
// 전위 연산
int num = 10;
System.out.println("전위연산 적용 전 num : " + num); //10
System.out.println("1회 수행후 결과 : " + ++num); // 10에서 증감연산 실행 ==> 11출력될 것, num에 담긴값 = 11
System.out.println("2회 수행후 결과 : " + ++num); // 12, num에 담긴값 12
System.out.println("3회 수행후 결과 : " + ++num); // 13, num에 담긴값 13
System.out.println("최종 num : " + num);
//sysout+ctrl+spacebar
System.out.println("=====================================================");
// 후위 연산
int num2 = 10;
System.out.println("후위연산 적용 전 num2 : " + num2); // 10
System.out.println("1회 수행후 결과 : " + num2++); // 후증감, 선처리 10
// 출력당시에는 10이 출력되고, 출력처리가 끝난 후 11로 후증감처리된다
System.out.println("2회 수행후 결과 : " + num2++); // 11
System.out.println("3회 수행후 결과 : " + num2++); // 12 (alt+ctrl+키보드 아래)
System.out.println("최종 num2 : " + num2);
}
public void method2() {
int a = 10;
int b = ++a; // a = 11, b = 11
System.out.println("a : " + a + " , b : " + b );
int c = 10;
int d = c++; // c = 11, d = 10
System.out.println("c : " + c + " , d : " + d );
// 예측
int num = 20;
System.out.println("현재 num : " + num); // 출력시 : 20, num : 20
System.out.println("++num? : " + ++num); // 출력시 : 21, num : 21
System.out.println("num++? : " + num++); // 출력시 : 21, num : 22
System.out.println("--num? :" + --num); // 출력시 : 21, num : 21
System.out.println("num-- : " + num--); // 출력시 : 21, num : 20
}
public void quiz() {
int a = 5;
int b = 10;
int c = (++a) + b;
int d = c / a; // 2
int e = c % a; // 4
int f = e++; // f = 4 , e = 5
int g = (--b) + (d--); // g = 11, b= 9, d = 2
int h = 2; // a : 6, b : 9, c : 16, d: 1, e: 5, f:4, g:11, h:2
int i = (a++) + b /(--c / f) * (g-- - d) % (++e + h);
// a : 6(7), b:9, c:15, d:1, e:6, f:4, g:11(10), h:2, i:12
// 6 + 9 / 3 * 10 % 8
// 6 + 3 * 10 % 8
// 6 + 30 % 8
// 6 + 6
// 12
// a : 7, b : 9 , c : 15, d: 1, e:6, f:4, g:10, h:2, i: 12
System.out.println(i);
}
3. 복합연산자
1) 복합대입연산자 : 산술연산자 + 대입연산자
+= , -=, *=, /=, %=
a = a + 1 => a++
a = a + 3 => a+= 3; // 기존의 a 값에 3을 더해서 a에 다시 대입해주겠다
public void method() {
int num = 12;
System.out.println("현재 num : " + num);
// num을 3 증가시키기
num = num + 3;
System.out.println("3 증가시킨 num : " +num);
num += 3;
System.out.println("3 증가시킨 num : " +num);
// num을 5 감소시키기
num -= 5;
System.out.println("5 감소시킨 num : " +num);
// num을 6배 증가시키기
num *= 6; // num = num * 6;
System.out.println("6배 증가시킨 num : " +num);
// num /= 2 == num = num / 2
// += 의 경우 문자열 접합도 가능함
String str = "Hello";
// str = str + "World";
str += "World!";
System.out.println(str);
}
4. 논리부정연산자
1) 논리부정연산자 ! (단항연산자)
!논리값(true/false)
논리값을 반대로 바꿔주는 연산자
public void method() {
// 1번 방법. 리터럴에 논리부정연산자 붙이기
System.out.println("true의 부정 : " + !true);
System.out.println("false의 부정 : " + !false);
// 2번 방법. 변수에 논리부정연산자 붙이기
boolean b = true;
boolean b2 = !b; // false
System.out.println("b : " + b);
System.out.println("b2 : " + b2);
// 3번 방법. 조건식, 계산식에 논리부정연산자 사용하기
boolean b3 = !(5>3);
System.out.println(b3);
}
5. 비교연산자(관계연산자)
1) 두 개의 값을 가지고 비교. 비교 연산한 결과가 참일 경우 true, 거짓일 경우 false 값을 반환
2) 나중에 특정 조건을 제시할 수 있는 조건문에서 많이 사용할 예정
ex) 크고 작음을 비교
a < b : a가 b보다 작습니까?
a > b : a가 b보다 큽니까?
a <= b, a>= b
일치함을 비교(동일성 비교) ==> 들어간 값이 같은지 비교
a == b : a와 b가 같습니까?
a != b : a와 b가 같지 않습니까?
public void method1() {
int a = 10;
int b = 25;
System.out.println("a > b : " + ( a > b )); // 괄호를 빼면 안됨! 우선순위가 '>' 보다 '+'가 더 높기 때문에 괄호를 빼면 오류 발생함
System.out.println("a <= b : " + ( a <= b ));
boolean result1 = (a == b); // false
System.out.println("result1 : " + result1);
boolean result2 = (a != b); // true
System.out.println("result2 : " + result2);
// 산술연산 + 비교연산
System.out.println(a - b < 0); // '<' 보다 '-'가 우선순위가 높기때문에 괄호안해도 -가 먼저 실행됨
// 어떤 값을 2로 나눴을 때 나머지 값이 0이면 짝수, 1이면 홀수
System.out.println("a가 짝수입니까? " + ( a % 2 == 0));
System.out.println("b가 짝수입니까? " + ( b % 2 != 1));
}
public void method2() {
Scanner sc = new Scanner(System.in);
System.out.print("정수값 한개 입력 : ");
int num = sc.nextInt();
System.out.println("사용자가 입력한 값은 짝수입니까 ? " + (num % 2 == 0));
System.out.println("사용자가 입력한 값은 양수입니까 ? " + (num > 0));
}
6. 논리 연산자
1) 두개의 논리값을 연산하는 연산자
2) 논리값 (논리연산자) 논리값 => 결과값도 논리값
AND 연산자 : 논리값 && 논리값 => 왼쪽 , 오른쪽 논리값이 둘다 TRUE여야 최종결과값 TRUE
OR 연산자 : 논리값 || 논리값 => 왼쪽, 오른쪽 논리값 중 하나라도 TRUE면 최종결과값 TRUE
public void method1() {
// 사용자가 입력한 정수값이 양수 이면서 짝수인지 확인하기. ==> ~이면서, ~이고, 그리고 => &&
Scanner sc = new Scanner(System.in);
System.out.print("정수값 한개 입력 : ");
int num = sc.nextInt();
boolean result1 = num > 0; // 양수면 true / 아니면 false
boolean result2 = num % 2 ==0; //짝수면 true /아니면 false
boolean result3 = result1 && result2;
System.out.println("사용자가 입력한 값이 양수이면서 짝수입니까? " + result3);
}
public void method2() {
// 사용자가 입력한 정수값이 1이상100 이하의 수인지 확인하기
Scanner sc = new Scanner(System.in);
System.out.print("정수값 입력 : ");
int num = sc.nextInt();
// 사용자가 입력한 값이 1이상 100이하 입니까? true/false
System.out.println("사용자가 입력한 값이 1이상 100이하 입니까? " + ((num>=1) && (num<=100)) );
}
public void method3() {
// 사용자가 입력한 값이 y이거나 Y인지 확인하기.
Scanner sc = new Scanner(System.in);
System.out.print("계속 진행하시려면 y를 입력해주세요 ");
char ch = sc.nextLine().charAt(0);
boolean result = ch == 'y' || ch == 'Y';
System.out.println("사용자가 입력한 값이 y 또는 Y입니까? " + result);
/*
* || (OR) : 또는, 이거나
* 두 조건 중 하나라도 true라면 결과값도 true
*
*/
}
★중요!!!!!★
public void method4() {
int num1 = 10;
//num1 이 11과 같으면서, 증감연산한 값이 0보다 큰지
boolean result1 = (num1 == 11) && (++num1 > 0);
// false 앞에 조건식이 false면 뒤에 조건식이 아예 실행이 안되기 때문에 뒤에 있는 '++num1'이 아예 실행이 안됨!
// && : 앞의 조건이 false인 경우 결과값이 무조건 false이기 때문에 뒤의 비교연산을 수행하지 않는다.
// || : 앞의 조건이 true인 경우 결과값이 무조건 true이기 때문에 뒤쪽의 연산을 수행하지 않는다.
System.out.println(num1); // 10
boolean result2 = true || (++num1 > 0); // OR 조건문이 있으면 true 가 있으면 뒤에 또 실행안함!!
// boolean result2 = false || (++num1 > 0); // OR 조건문이면 앞에가 false 이니까 뒤에 조건문이 참인지 확인해야하기 때문에 실행하면 num1 = 11이 됨
System.out.println(num1); // 10
/*
* 뒤의 비교연산 구문이 Dead code라고 뜬다.
* 실행할 때는 오류가 나지 않지만, result2의 결과값이 어차피 true인데 왜 작성한 구문지 물어보는 것
*/
}
7. 삼항연산자
1) 삼항연사자 : 3개의 항목을 가지고 연산하는 연산자
2) [표현법]
조건식 ? 조건식의 결과값이 true인 경우 결과값 : 조건이 false인 경우 결과값
public void method1() {
// 사용자가 입력한 값이 양수값인지 아닌지 판별 후, 양수라면 양수입니다. 아니라면 양수가 아닙니다를 출력
Scanner sc = new Scanner(System.in);
System.out.print("정수값 입력 : ");
int num = sc.nextInt();
// 조건식 ? 조건식의 결과값이 true인 경우 결과값 : 조건이 false인 경우 결과값
// String result = num > 0 ? "양수입니다" : "양수가 아닙니다";
// System.out.println(num + "은(는) " + result);
System.out.println(num + "은(는) " + (num > 0 ? "양수입니다" : "양수가 아닙니다"));
// 산술연산이 삼항연산자보다 우선순위가 낮기 때문에 반드시 ()로 묶어줘야한다.
}
7.1 삼항연산자 중첩사용
public void method4() {
// method1()을 보완하여 사용자가 입력한 정수값이 양수인지 0인지 음수인지 판별
Scanner sc = new Scanner(System.in);
System.out.print("정수값 입력 : ");
int num = sc.nextInt();
System.out.println(num + "은(는) " + (num > 0 ? "양수입니다" : (num == 0 ? "0입니다" : "음수입니다")));
// 먼저 num > 0이 실행이 되고 양수가 아니면 다음 num == 0 조건문이 실행되는데 false일 경우 "음수입니다" 출력
}
public void method5() {
// 두개의 정수값과 +, -의 '문자'를 입력받아
// +일 경우 두 정수값의 덧셈연산한 결과를 출력
// -일 경우 두 정수값의 뺄셈연산한 결과를 출력
// 둘다 아닐경우 잘못입력했습니다를 출력
Scanner sc = new Scanner(System.in);
System.out.print("첫번째 정수 : ");
int num1 = sc.nextInt();
System.out.print("두번째 정수 : ");
int num2 = sc.nextInt();
sc.nextLine();
System.out.print("연산자 입력(+ or -) : ");
char ch = sc.nextLine().charAt(0);
String result = ((ch == '+') ? (num1 + num2)+"" : (ch == '-' ? (num1-num2)+"" : "잘못 입력했습니다"));
System.out.println(result);
}
'JAVA > JAVA 기초' 카테고리의 다른 글
[JAVA] 4-1. 제어문(Switch) (0) | 2023.10.05 |
---|---|
[JAVA] 4. 제어문(if) (0) | 2023.10.04 |
[JAVA] 2. 자료형 변환, printf 문 (0) | 2023.09.27 |
[JAVA] 1-3. Scanner 클래스 (0) | 2023.09.27 |
[JAVA] 1-2. 변수 (0) | 2023.09.26 |