국비/Java

[03-2] Java - Operator 연산자

제발 취업하게 해주세요 2022. 4. 11. 19:41
❗ Arithmetic Operator 산술 연산자 => 이항 연산자
* 연산 방법, 우선순위가 일반 수학 산술과 동일하다
* + : 덧셈
* - : 뺄셈
* * : 곱셈
* / : 나눗셈
* % : 모듈러(Modular) => 나눗셈에서 나머지를 구함

* 특이케이스
System.out.println(5/0); // error
ArithmeticException : /by zero
정수를 0으로 나눌 수 없음

		int num1 = 10;
		int num2 = 3;
        
        System.out.println("num 1 : " + num1 + "num 2 : " + num2); // 10, 3
		
		System.out.println("num1 + num2 : " + num1 + num2); // 결과값은? 103
		System.out.println("num1 + num2 : " + (num1 + num2)); // 결과값은? 13
		// (num1 + num2) 괄호로 묶어줘야 13이라는 결과값이 나옴!
		// 만약에 묶지 않고 출력하면 String(문자열)로 인식하기 때문에 "10" + "3" = "103"이 출력
		
		System.out.println("num1 - num2 : " + (num1 - num2));
		// 뺄셈의 경우 괄호로 묶지 않으면
		// 문자열과 num1을 하나로 묶어서 새로운 문자열을 만들기 때문에 오류 발생
		
		System.out.println("num1 * num2 : " + num1 * num2);
		System.out.println("num1 / num2 : " + num1 / num2);
		
		// *, /, % 우선순위가 +, -보다 높기 때문에 묶지 않아도 먼저 연산이 됨
		// 단, 가독성을 위해 괄호를 사용할 것을 권장함
[실습] 사탕 나눠주기 프로그램
메소드명 : methodCandy()

입력받을 값 : 1. 인원 수
2. 사탕 갯수

1인당 가질 수 있는 사탕의 갯수 : 사탕 갯수 / 인원수

출력 형식
1인당 가질 수 있는 사탕의 갯수 : n개
남는 사탕의 갯수 : n개
	public void methodCandy() {
		
		Scanner scanner = new Scanner(System.in);
		
		System.out.println("인원수를 입력해주세요");
		int person = scanner.nextInt(); // 인원수
		
		System.out.println("사탕 갯수를 입력해주세요");
		int candy = scanner.nextInt(); // 사탕 갯수
		
		System.out.println("1인당 가질 수 있는 사탕의 갯수 : " + (candy / person));
		System.out.println("남는 사탕의 갯수 : " + (candy % person));
	}

❗ Indecrease Operator 증감 연산자
* 증감연산자 : 단항연산자로서 한번에 1씩 증가하거나 감소하는 연산을 한다.
* => 먼저 증감을 할건지, 나중에 증감을 할건지 연산자의 위치에 따라 달라진다.

* [표현법]
* ++ : 값을 1씩만 증가시키는 연산자
* -- : 값을 1씩만 감소시키는 연산자

* 연산자의 위치
* 전위연산 : ++값, --값 => 먼저 값을 증감하고 그 값을 처리한다.
* 후위연산 : 값++, 값-- => 값을 먼저 처리하고 나서 증가하거나 감소한다.

		int a = 10;
		int b = a++; // b에 a값 10을 대입한 후 a++ = 11
		
		System.out.println(a); //11
		System.out.println(b); //10
		// b라는 변수에 a값을 먼저 대입하고 (선 처리 부분)
		// a라는 값을 증가시킨다 (후 연산)
		
		int c = 20;
		int d = c--;
		
		System.out.println(c); //19
		System.out.println(d); //20
        // d라는 변수에 c값을 먼저 대입하고
        // c값을 감소시킨다
        
        
        //후위연산자
		int num1 = 20;
		int result = num1++*3;
		
		System.out.println(num1);// 21
		System.out.println(result); //60
		
		//전위연산자
		int num2 = 20;
		int result2 = ++num2*3;
		
		System.out.println(num2); //21
		System.out.println(result2); //63
❗ Compound Assignment Operator 복합 대입 연산자 : "=" 대입연산자
* 다른 산술 연산자랑 대입연산자가 결합한 것
=> 자기 자신과 해당 산술연산 후에 그 결과를 자기자신한테 덮어씌우는 것

+=, -=, /=, %=

ex) int a = 1;
a = a + 3;
기존에 a 값에 3을 더하고 그 결과 값을 a에 다시 대입하겠다.
=> a += 3;
	int num = 12;
	System.out.println(num); // 12
	
	//num을 3 증가시키기
		num = num + 3;
		System.out.println("3을 증가시킨 num : " + num); // 15
	
	//num을 3 증가시키기
		num += 3;
		System.out.println("3을 증가시킨 num : " + num); // 18
	
	//num을 3 감소시키기
		num -= 3;
		System.out.println("3을 감소시킨 num : " + num); //15
	
	
	//num을 3배 증가시키기
		num *= 3;
		System.out.println("3배 증가시킨 num : " + num); //45
	
	//num을 2배 감소시키기
		num /= 2;
		System.out.println("3배 감소시킨 num : " + num); //22
	
	//num을 2로 나눈 나머지를 num에 대입
		num %= 2;
		System.out.println("3을 감소시킨 num :" + num); //0
❗ Logical Negation Operator 논리 부정 연산자
* true, false을 반대로 바꿔주는 연산자

* [표현법] !논리값
ex) !true = false
❗ Comparison Operator 비교 연산자 ☆☆☆☆☆
* 비교연산자 (관계연산자)
* 두 개의 값을 가지고 비교, 이항연산자
* 비교연산을 한 결과 => 참일 경우 true, 거짓일 경우 false
* 특정 조건을 제시할 수 있는 ★조건문★에서 쓰일 예정

* 종류
* 1. 크고 작음을 비교 (의문문)
* a < b : a는 b보다 작습니까?
* a > b : a는 b보다 큽니까?
* a <= b : a는 b보다 작거나 같습니까?
* a >= b : a는 b보다 크거나 같습니까?
*
* 2. 일치함을 비교 : 동등비교
* a == b : a와 b는 일치합니까?
* a != b : a와 b는 일치하지 않습니까?
*
* => 피연산자는 숫자, 결과값은 논리값
❗ Logical Operator 논리 연산자
* 두 개의 논리값을 연산하는 연산자
* [표현법] 논리값 논리연산자 논리값 => 결과값도 논리값

* 종류
* 1. AND 연산자 : 논리값 && 논리값
* 좌항과 우항의 값이 모두 true 여야만 최종 결과가 true
* 2. OR 연산자 : 논리값 || 논리값
* 좌항 또는 우항의 값 중 하나로 true 이면 최종 결과가 true


* && : 두 개의 조건이 모두 true일 때 결과가 true
* ture && true => true
* true && false => false
* false && true => false
* false && false => false

* || : 두 개의 조건 중 하나라도 true 이면 결과가 true
* ture || true => true
* true || false => true
* false || true => true
* false || false => false
*
	public void method1() {	
		// 사용자가 입력한 정수값이 양수 "이면서(이고)" 짝수인지 확인해보자
		
		Scanner sc = new Scanner(System.in);
		System.out.println("정수를 입력해 주세요 : ");
		int num = sc.nextInt();
		
		boolean result1 = num > 0;
		boolean result2 = num % 2 == 0;
		
		//boolean result = (num > 0) && (num % 2 == 0);
		System.out.println("사용자가 입력한 정수가 양수이면서 짝수입니까? : " + (result1 && result2));
		sc.close();
	}
	
	public void method2() {
		// 입력한 정수값이 1 이상 100 이하인지 확인해보자
		
		Scanner sc = new Scanner(System.in);
		System.out.println("정수를 입력해 주세요 : ");
		int num = sc.nextInt();
		boolean result = ((100 >= num) && (num >= 1));
		
		System.out.println("정수값이 1 이상 100 이하입니까?\n" + result);
		sc.close();
	}
	
	// OR
	public void method3() {
		
		// 사용자가 입력한 값이 A 또는 a인지 확인해보자
		Scanner sc = new Scanner(System.in);
		System.out.println("알파벳 한 글자만 입력해주세요.");
		char ch = sc.next().charAt(0);
		// ch = 문자, sc.next() = 문자열
		// charAt(index) = 문자열을 char형으로 반환

		// 배열 맛보기
		// 문자열 : 순서 있는 문자의 모임!
		// index : 순서	** 0부터 시작
		
		// 비교연산자의 경우 피연산자 == 숫자
		// 문자의 경우 비교연산이 가능한가 ? 가능하다!! => 왜? int로 자동형변환이 되기 때문에(int)
		
		boolean result = (ch == 'A') || (ch =='a');
		// || : ~~이거나, 또는
		
		System.out.println("사용자가 입력한 알파벳이 A 또는 a입니까? :\n" + result);
	}
    
    public void method4() {
		int num = 10;
		boolean result = false && (num > 0);
		// Deadcode : 뒤의 비교연산 구문이 실행되지 않음
		// 실행오류는 나지 않지만 굳이 결과값은 false일텐데 왜 써?
		
		System.out.println("result : " + result);
❗ Ternary Operator 삼항 연산자
* 피연산자가 3개 => 값 3개와 연산자 1개로 이루어짐 (조건식 형식으로 쓰임)

* 조건식 : 결과값에 따라서 연산을 처리하는 방식
* 결과값이 참일 경우 식 1을 처리하고,
* 결과값이 거짓일 경우 식2를 처리한다.

* [표현식]
* 조건식 ? 조건이 true일 경우 결과값 : 조건이 false일 경우 결과값
public void method1() {
		// 사용자가 입력한 값이 양수인지 아닌지 판별 후 그에 맞는 결과 출력
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("정수를 입력해주세요 : ");
		int num = sc.nextInt();
		
		String result = (num > 0) ? "양수" : ((num == 0) ? "0" : "양수 아님");
		
	//	String result = (num > 0) ? "양수" : "양수 아님";
						//조건식 ? 조건이 true일 경우 결과값 : 조건이 false일 경우 결과값
		
		System.out.println(num + "은(는) " + result);
		sc.close();
		
	}
	
	public void method2() {
		
		// 짝수, 홀수 판별
		
		Scanner sc = new Scanner(System.in);
		System.out.println("정수를 입력해주세요.");
		int num = sc.nextInt();
		String result = (num % 2 == 0) ? "짝수" : "홀수";
		
		System.out.println(num + "은(는) " + result + " 입니다.");
		sc.close();
	
	}
	
	public void method3() { // 실습
		// 영문자 하나를 입력받아서 대문자인지 아닌지 판별
		
		Scanner sc = new Scanner(System.in);
		System.out.println("영문자 하나만 입력해주세요");
		char ch = sc.next().charAt(0);
		
		// 'a' ~ ch ~ 'z'
		String result = ('a' <= ch && ch <= 'z') ? "대문자가 아닙니다" : "대문자 입니다";
		
		System.out.println(result);
		sc.close();
		
	}