고래씌

[JAVA] 3. 연산자(산술연산자, 증감연산자, 복합연산자, 논리부정연산자, 비교연산자, 논리연산자, 삼항연산자) 본문

JAVA/JAVA 기초

[JAVA] 3. 연산자(산술연산자, 증감연산자, 복합연산자, 논리부정연산자, 비교연산자, 논리연산자, 삼항연산자)

고래씌 2023. 10. 4. 12:50

1. 산술연산자

: 산술연산자(이항연산자 == 두개의 값을 가지고 연산)

 →  * / % + -

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