수업내용/Java

[2022.09.05.월] 연산자

주니어주니 2022. 9. 5. 23:25

1. 연산자

 

1-1. 산술 연산자

 

package day3;

public class Op1 {
	
	public static void main(String[] args) {
		/*
		 * 산술 연산자
		 * 	+ - * % 
		 * 	연산에 참여한 데이터의 자료형과 연산결과의 자료형이 항상 동일하다.
		 * 	연산에 참여한 데이터의 자료형이 다르면 형변환을 통해서 같은 자료형으로 변환한 다음 연산이 수행된다. 
		 * 	산술 연산자의 연산 대상은 숫자다. (단, 덧셈연산자는 문자열도 가능)
		 * 	나머지 연산자의 연산결과는 항상 "0 <= 값 < 나누는 숫자" 사이의 값이다. 
		 * 
		 * 	산술 연산자를 사용하는 관례
		 * 		값 + 값
		 * 		값 - 값
		 * 		값*값
		 * 		값/값
		 * 		값%값
		 * 		예) 1 + 2*4 
		 * 		
		 * 	
		 * 	+ 연산자는 두 가지 동작을 가진다. 
		 * 		숫자 + 숫자  = 숫자
		 * 		문자열 + 문자열 = 문자열
		 * 		문자열 + 숫자  = 문자열 
		 * 		숫자  + 문자열 = 문자열
		 * 
		 * 		1 + 3 => 4
		 * 		"안녕" + 3 => "안녕3"
		 * 		3 + "안녕" => "3안녕"
		 * 		"홍" + "길동" => "홍길동"
		 * 		1 + 3 + "안녕" + 5 + 7 => "4안녕57"
		 * 		* 덧셈연산자의 좌항이나 우항에 문자열이 있으면 두 항의 값이 연결된 새로운 문자열이 나옴 
		 * 
		 */
		
		int number1 = 10;
		int number2 = 3;
		System.out.println(number1 + number2);
		System.out.println(number1 - number2);
		System.out.println(number1*number2);
		System.out.println(number1/number2);
		System.out.println(number1%number2);	
		
		String str1 = "홍길동";
		System.out.println(number1 + number2 + str1); // 10 + 3 + "홍길동" => "13홍길동"
		System.out.println(number1 + str1 + number2); // 10 + "홍길동" + 3 => "10홍길동3"
		System.out.println(str1 + number1 + number2); // "홍길동" + 10 + 3 => "홍길동103"
		
		int korScore = 80;
		int engScore = 70;
		int mathScore = 80;
		int totalScore = korScore + engScore + mathScore;
		double averageScore = totalScore/3.0;
		
		System.out.println(totalScore);
		System.out.println(averageScore);
	}

}
13
7
30
3
1
13홍길동
10홍길동3
홍길동103
230
76.66666666666667

 

 

 

1-2. 형변환 연산자

 

public class Op2 {
	
	public static void main(String[] args) {
		// 홍길동은 로또 1등에 당첨되어서 상금 15억원을 수령하게 되었다. 
		// 로또 상금에 대한 세금은 상금의 25%이다.
		// 홍길동이 실제로 수령하게 되는 로또 상금과 세금으로 납부하는 금액은 각각 얼마인지 출력하시오.
		// 수령액과 세금은 소수점 부분은 고려하지 않는다.
		
		// 상금
		int reward = 1_500_000_000;
		// 세율
		double tariff = 0.25;
		
		// 세금납부액
		int tax = (int) (reward*tariff);		
		// 실수령액
		int realAmount = reward - tax;
		
		System.out.println("실수령액: "+realAmount+"원");
		System.out.println("세금: "+tax+"원");	
	}
}
실수령액: 1125000000원
세금: 375000000원

 

 

 

1-3. 대입연산자

 

package day3;

public class Op3 {
	
	public static void main(String[] args) {
		/*
		 * 대입연산자
		 * 		=  +=  -=  *=  /=  %=
		 * 		우항의 값을 좌항의 변수에 대입한다.
		 * 		연산우선순위가 가장 낮은 연산자
		 * 
		 * 		int x = 10;    // 정수 10을 변수(저장소)에 대입(저장)한다.
		 * 		
		 * 		int y = 10; 
		 * 		y += 3;        // y = y + 3;에 대한 문법적 설탕이다.
		 * 					   // 변수y의 값에 3을 더한 값을 y에 대입한다.
		 * 
		 * 		int y = 10;
		 * 		y -= 3;        // y = y - 3;   y의 최종값은 7
		 * 
		 * 		int y = 10;
		 * 		y *= 3;        // y = y*3;     y의 최종값은 30
		 * 
		 * 		int y = 10; 
		 * 		y /= 3;        // y = y/3;     y의 최종값은 3
		 * 
		 * 		int y = 10;
		 * 		y %= 3;        // y = y%3;     y의 최종값은 1
		 */
		
		int korScore = 100; 
		int engScore = 80; 
		int mathScore = 80;
		
		/*
		 * int totalScore = 0;			//				0			 100  	  
		 * totalScore += korScore;		// totalScore = totalScore + korScore; 
		 * 
		 * 아래의 식은 totalScroe의 값이 초기화되지 않았기 때문에 문법오류. 
		 * 												쓰레기값		 100
		 * int totalScore += korScore;  // totalScore = totalScore + korScore; 
		 */
		
		int totalScore = 0;				System.out.println(totalScore);
		totalScore += korScore; 		System.out.println(totalScore);
		totalScore += engScore;			System.out.println(totalScore);
		totalScore += mathScore;		System.out.println(totalScore);
		
		System.out.println("총점: " + totalScore);
	}
}
0
100
180
260
총점: 260

 

 

 

1-4. 증감연산자

 

변수

데이터를 저장하는 가장 단순한 형태 

int x = 10; 

 

배열

변수는 값을 하나밖에 못담아서 그래서 배열이라는 데이터타입이 있어 

int[] x = {10, 20, 30, 40};

 

콜렉션    

콜렉션은 값을 엄청 여러개를 담을 수 있어 

List<String> x = new ArrayList<>(); 

x.add("바나나");

x.add("사과");

x.add("수박");

x.add("포도"); 

 

0번째부터 n번째까지 있는 여러개의 값을 순서대로 1씩 증가시키거나 감소시키면서 꺼내고 싶을 때

증감연산자 필요 

 

 

배열은  값을 여러개 갖고있고, 그 값들이 순서대로 담겨있어

그 값들이 들어있는 각 방에 고유한 인덱스가 매겨져 있음

이 인덱스 번호를 1씩 증가/감소시키고 싶을 때 증감식 

 

 

 

package day3;

public class Op4 {

	public static void main(String[] args) {
		/*
		 * 증감연산자
		 * 		++   -- 
		 * 		증감연산자는 단항연산자.
		 * 		증감연산자는 무조건 변수의 앞뒤에 붙여서 사용한다.
		 * 		예) int x = 10;
		 * 		   x++;
		 * 		   ++x; 
		 * 
		 * 		증감연산자는 변수의 값을 1증가시키거나 1감소시킨다.
		 * 		증감연산자를 다른 연산자와 같이 사용할 때는 증감연산자의 위치에 따라 연산결과가 달라질 수 있다.
		 * 		int x = 10;
		 * 		int y = 10;
		 * 		int j = ++x;	// x의 값이 1증가되고, x의 값이 j에 대입됨. // j=11 , x=11
		 * 		int k = y++;	// y의 값이 k에 대입되고, y의 값이 1증가됨. // k=10 , y=11 
		 * 
		 * 		// 증감연산과 덧셈연산을 분리하지 않으면, 증감연산자의 위치에 따라서 다른 연산결과가 나온다. 
		 * 		int x = 10;
		 * 		int y = 10;
		 * 		int z = 100;
		 * 		int j = x++ + z;	// j=110  
		 * 		int k = ++y + z;	// k=111  
		 * 
		 * 		// 증감연산자와 덧셈연산을 분리시키면, 증감연산자의 위치에 상관없이 같은 연산결과가 나온다. 
		 * 		// 계산순서를 고민할 필요없이 그냥 증가시키면 됨
		 * 		int x = 10;
		 * 		int y = 10; 
		 * 		int z = 100;
		 * 		x++;				
		 * 		++y;
		 * 		int j = x + z;		// j=111
		 * 		int k = y + z;		// k=111 
		 */
		
		int a = 10; 
		int b = 10; 
		
		a++;
		b--;
		System.out.println("a의 값: "+a);
		System.out.println("b의 값: "+b);
		
		++a;
		--b;
		System.out.println("a의 값: "+a);
		System.out.println("b의 값: "+b);
		
		// 증감연산자와 다른 연산자를 하나의 연산식에서 함께 사용하면 증감연산자의 위치에 따라 다른 연산결과가 나온다.
		// 그니까 쓰지마라
		int x = 10;
		int y = 10;
		int z = 100;
		
		int j = ++x + z;	// x의 값이 1증가되고 연산 -> 11 + 100
		int k = y++ + z;	// 10 + 100 -> 연산 먼저 하고 y의 값이 1증가됨
		
		System.out.println("x의 값: "+x);
		System.out.println("y의 값: "+y);		//연산,증감 후의 시점이니까 y=11이 맞음 
		System.out.println("j의 값: "+j);
		System.out.println("k의 값: "+k);
	}
}
a의 값: 11
b의 값: 9
a의 값: 12
b의 값: 8
x의 값: 11
y의 값: 11
j의 값: 111
k의 값: 110

 

 

1-5. 비교연산자, 논리연산자

 

package day3;

public class Op5 {
	
	public static void main(String[] args) {
		/*
		 * 비교 연산자
		 * 		>  <  >=  <=  ==  !=
		 * 		비교 연산자의 연산결과는 항상 boolean값이다.(true/false)
		 * 		>  <  >=  <=  ==  != 의 연산대상은 정수, 실수, 문자 가능. (문자열x)
		 * 		단, == != 는 참조자료형도 연산대상 가능. 
		 * 
		 * 		목적: 값이 제시된 기준(1개)을 만족하는지 여부를 검사하는 연산자. (예/아니오)
		 * 
		 * 		예) 점수가 60점 이상이면 합격이다.
		 * 		int score = 80;
		 * 		int passScore = 60;
		 * 		boolean passed = score >= passScore;	// passed의 값은 true
		 * 
		 * 		예) 구매금액이 100만원 이상이면 사은품을 지급한다.
		 * 
		 * 		예) 학점이 4.3 이상이면 성적장학금을 지급한다. 
		 * 
		 * 
		 * 논리 연산자
		 * 		&&  ||  ! 
		 * 		논리 연산자의 연산결과는 항상 boolean값이다. 
		 * 		논리 연산자의 연상대상은 항상 boolean값 혹은 연산결과가 boolean값인 연산식이다.
		 * 		논리 연산자 중에서 !는 단항 연산자다.
		 * 
		 * 		&& 연산자의 경우 좌항이 false로 판정되면 우항은 검사하지 않는다.
		 * 		|| 연산자의 경우 좌항이 true로 판정되면 우항을 검사하지 않는다. 
		 * 
		 * 		&&(and 조건 논리연산자)
		 * 			좌항, 우항 모두 true이어야 true 반환
		 * 		||(or 조건 논리연산자)
		 * 			좌항, 우항 둘 중 하나만 true여도 true 반환
		 * 		! (논리부정 논리연산자)
		 * 			항의 값이 true이면 false, 값이 false이면 true 반환
		 * 
		 * 		목적: 제시된 조건(2개 이상)을 전부 만족하는지, 하나라도 만족하는지 검사하는 연산자
		 * 
		 * 		예) 주행거리가 10만km미만이고, 사용연한이 3년 미만이면, 무상수리 대상이다.
		 * 			int 주행거리 = 11000;
		 * 			int 사용연한 = 2;
		 * 			boolean 무상수리여부 = 주행거리 < 10000 && 사용연한 < 3;
		 * 
		 * 		예) 고객등급이 S이거나, 구매금액이 50만원 이상이면, 1만원권 상품권을 지급한다.
		 * 			char grade = 'B';
		 * 			int orderPrice = 650000;
		 * 			boolean 상품권수령여부 = grade == 'S' || orderPrice >= 500000;
		 * 
		 * 		예) 소득이 1200만원을 초과, 4600만원 이하일 때, 1200만원 초과금액에 대해 15%를 과세한다.
		 * 			int 소득 = 36000000;
		 * 			boolean 과세여부 = 소득 > 12000000 && 소득 <= 46000000
		 * 		
		 */
		
		// 합격여부를 판정하기 - 점수가 60점 이상이면 합격
		int 점수 = 35;
		boolean 합격여부 = 점수 >= 60; 
		System.out.println("합격여부: "+합격여부);
		
		// 무상수리 여부를 판정하기 - 주행거리가 10만km미만, 사용연한이 3년이하면 무상수리 대상
		int 주행거리 = 25000;
		int 사용연한 = 2;
		boolean 무상수리여부 = 주행거리 < 100000 && 사용연한 <= 3;
		System.out.println("무상수리여부: "+무상수리여부);
		
		// 사은품 지급여부를 판정하기 - 고객등급이 S이면서 구매금액이 10만원 이상이거나, 그 외 등급은 50만원 이상 구매하면 사은품 지급대상 
		char 등급 = 'B';
		int 구매금액 = 450000;
		boolean 사은품지급여부 = (등급=='S' && 구매금액 >= 100000) || 구매금액 >= 500000;
		System.out.println("사은품지급여부: "+사은품지급여부);
		
		// 초과과세 대상여부를 판정하기 - 소득이 1200만원 초과 4600만원 이하면 1200만원 초과소득에 대해 15% 과세대상
		int 소득 = 14000000;
		boolean 초과과세대상여부 = 소득 > 12000000 && 소득 <= 46000000;
		System.out.println("초과과세대상여부: "+초과과세대상여부);
	}
}
합격여부: false
무상수리여부: true
사은품지급여부: false
초과과세대상여부: true

 

 

 

1-6. 조건 연산자 (삼항연산자)

 

package day3;

public class Op6 {
	
	public static void main(String[] args) {
		/*
		 * 조건 연산자 (3항 연산자)
		 * 		조건식 ? 값1 : 값2
		 * 		조건식 ? 연산식1 : 연산식2
		 * 		
		 *  
		 * 		*조건식은 true/false값이 최종연산결과로 나오는 식
		 * 		 (비교연산자, 논리연산자를 사용하는 식)
		 * 		*값1과 값2는 같은 타입의 값이어야 한다.
		 * 		*연산식1과 연산식2는 같은 타입의 결과값이 나오는 연산식이어야 한다.
		 * 		*조건식의 결과가 true이면 값1 또는 연산식1 반환
		 * 		*조건식의 결과가 false이면 값2 또는 연산식2 반환
		 * 		(주로 조건식이 단순할 때, 웹에서 삭제 등의 아이콘 버튼 비활성화 용도)
		 * 		예)
		 * 		login.no==writer.no ? '활성화' : '비활성화';
		 */
		
		// 평균점수가 60점 이상이면 합격, 그 외는 불합격이라고 출력한다.
		int average = 65;
		String message = average >= 60 ? "합격" : "불합격";
		System.out.println(message);
		
		// 구매금액이 100만원 이상이면 구매금액의 1%만큼 포인트가 적립되고, 그 외는 0.3%만큼 적리된다.
		int orderPrice = 1200000;
		int point = orderPrice >= 1000000 ? (int) (orderPrice*0.01) : (int) (orderPrice*0.003);
		System.out.println("적립포인트: "+point);
		
		// 소득이 1200만원 이하의 경우 소득의 6%를 과세하고,
		// 그 외는 1200만원 초과분에 대해서 72만원+(1,200만원 초과금액의 15%)로 과세한다.
		// 소득 1000만원, 1500만원, 2000만원, 2500만원, 3000만원, 3500만원, 4000만원, 4500만원에 대해서
		// 세금과 실수령액을 출력하기
		int income1 = 10000000;
		int income2 = 15000000;
		int income3 = 20000000;
		int income4 = 25000000;
		int income5 = 30000000;
		int income6 = 35000000;
		int income7 = 40000000;
		int income8 = 45000000;
				
		// int 세금 = 소득 <= 12000000 ? (int) (소득*0.06) : 720000 + (int) ((소득 - 12000000)*0.15);
		int tax1 = income1 <= 12000000 ? (int)(income1*0.06) : 720000 + (int)((income1-120000)*0.15);
		int tax2 = income2 <= 12000000 ? (int)(income2*0.06) : 720000 + (int)((income2-120000)*0.15);
		int tax3 = income3 <= 12000000 ? (int)(income3*0.06) : 720000 + (int)((income3-120000)*0.15);
		int tax4 = income4 <= 12000000 ? (int)(income4*0.06) : 720000 + (int)((income4-120000)*0.15);
		int tax5 = income5 <= 12000000 ? (int)(income5*0.06) : 720000 + (int)((income5-120000)*0.15);
		int tax6 = income6 <= 12000000 ? (int)(income6*0.06) : 720000 + (int)((income6-120000)*0.15);
		int tax7 = income7 <= 12000000 ? (int)(income7*0.06) : 720000 + (int)((income7-120000)*0.15);
		int tax8 = income8 <= 12000000 ? (int)(income8*0.06) : 720000 + (int)((income8-120000)*0.15);
		
		System.out.println("소득 1000만원: 세금-" + tax1 + " 실수령액-" + (income1-tax1)/12);
		System.out.println("소득 1500만원: 세금-" + tax2 + " 실수령액-" + (income2-tax2)/12);
		System.out.println("소득 2000만원: 세금-" + tax3 + " 실수령액-" + (income3-tax3)/12);
		System.out.println("소득 2500만원: 세금-" + tax4 + " 실수령액-" + (income4-tax4)/12);
		System.out.println("소득 3000만원: 세금-" + tax5 + " 실수령액-" + (income5-tax5)/12);
		System.out.println("소득 3500만원: 세금-" + tax6 + " 실수령액-" + (income6-tax6)/12);
		System.out.println("소득 4000만원: 세금-" + tax7 + " 실수령액-" + (income7-tax7)/12);
		System.out.println("소득 4500만원: 세금-" + tax8 + " 실수령액-" + (income8-tax8)/12);
	
	}
}
합격
적립포인트: 12000
소득 1000만원: 세금-600000 실수령액-783333
소득 1500만원: 세금-2952000 실수령액-1004000
소득 2000만원: 세금-3702000 실수령액-1358166
소득 2500만원: 세금-4452000 실수령액-1712333
소득 3000만원: 세금-5202000 실수령액-2066500
소득 3500만원: 세금-5952000 실수령액-2420666
소득 4000만원: 세금-6702000 실수령액-2774833
소득 4500만원: 세금-7452000 실수령액-3129000

 

 

 

2. 참조변수, 객체

 

2-1.  참조변수, 객체

 

package day3;

import utils.KeyboardReader;

public class Op7 {

	public static void main(String[] args) {
							  	
		/*
		 * 설계도(클래스)로 객체 생성하고, 참조하기
		 * 
		 * KeyboardReader reader = new KeyboardReader();
		 * 
		 *  - new 예약어
		 *  	: 지정된 설계도로 객체를 생성한다.
		 *  	: 생성된 객체의 주소값을 변수에 대입한다.
		 *  
		 *  - new KeyboardReader()
		 *  	: keyboardReader 설계도로 객체를 생성하고,
		 *  
		 *  - reader = new KeyboardReader()
		 *  	: 생성된 객체의 주소값을 reader 변수에 대입한다. 
		 *  
		 * 	- KeyboardReader reader
		 * 		: KeyboardReader 타입의 참조변수 reader를 생성한다.
		 * 
		 * 	- reader 참조변수
		 *    	: KeyboardReader 설계도로 생성된 객체의 주소값을 담는 변수이다.
		 *  	: 생성된 KeyboardReader 객체를 참조한다.
		 *  	: reader 변수를 이용해서 KeyboardReader 객체의 공개된 속성과 기능을 사용할 수 있다.
		 *  
		 *  -reader.getInt();
		 *   	: reader 변수가 참조하는 KeyboardReader 객체 안에 있는 getInt() 기능을 실행한다.
		 *  -reader.getDouble();
		 *   	: reader 변수가 참조하는 KeyboardReader 객체의 getDouble() 기능을 실행한다.
		 *   - . : 클래스 접근 연산자
		 */
		
		KeyboardReader reader = new KeyboardReader();
		
		System.out.print("이름을 입력하세요: ");
		String name = reader.getString(); 
		// reader변수가 참조하는 문자열 기능을 이용할건데 이걸 string타입의 변수 name에 저장할거야
		
		System.out.print("학년을 입력하세요: ");
		int grade = reader.getInt();
		
		System.out.print("국어점수를 입력하세요: ");
		int korScore = reader.getInt();
		
		System.out.print("영어점수를 입력하세요: ");
		int engScore = reader.getInt();
		
		System.out.print("수학점수를 입력하세요: ");
		int mathScore = reader.getInt();
		
		System.out.println();
		System.out.println("이름: "+name);
		System.out.println("학년: "+grade);
		System.out.println("국어점수: "+korScore);
		System.out.println("영어점수: "+engScore);
		System.out.println("수학점수: "+mathScore);
				
	}
}
이름을 입력하세요: 김준희
학년을 입력하세요: 4
국어점수를 입력하세요: 100
영어점수를 입력하세요: 80
수학점수를 입력하세요: 90

이름: 김준희
학년: 4
국어점수: 100
영어점수: 80
수학점수: 90

 

 

- . : 클래스 접근 연산자

 

reader. 을 쳐서 reader 변수가 참조하는 KeyboardReader 객체의 기능들을 불러온다

getBoolean()이라는 기능을 사용할거야

이 기능의 데이터 타입 : boolean 타입이야 

KeyboardReader라는 객체 안에 있는 기능(메소드)이야

 

print기능의 데이터 타입 : void

void : 값을 반환하지 않는다.

 

 

 

 

 

 

package day3;

import utils.KeyboardReader;

public class Op8 {
	
	public static void main(String[] args) {
		/*
		 * 고객이름, 상품명, 가격, 구매수량을 입력받아서 구매정보를 출력하기
		 * 구매정보는 고객이름, 상품명, 가격, 구매수량, 총구매가격, 적립포인트를 말한다.
		 * 적립포인트는 구매가격의 1%
		 * 
		 * 1. 키보드 입력을 읽어오는 KeyboardReader 객체를 생성해서 reader 변수에 대입한다.
		 * 2. 고객이름, 상품명, 가격, 구매수량을 입력하라는 메세지를 출력하고, 입력받아서 변수에 저장한다.
		 * 3. 입력된 정보를 이용해서 총구매가격과 적립포인트를 계산해서 변수에 저장한다.
		 * 4. 변수에 저장된 값을 화면에 출력한다.
		 */
		
		// 1. 키보드 입력을 읽어오는 기능이 포함된 객체 생성
		KeyboardReader reader = new KeyboardReader();
		
		// 2. 사용자에게 입력할 정보를 안내하고, 입력된 정보를 읽어서 변수에 저장
		System.out.print("고객명: ");
		String name = reader.getString();
		
		System.out.print("상품명: ");
		String productName = reader.getString();
		
		System.out.print("상품가격: ");
		int price = reader.getInt();
		
		System.out.print("구매수량: ");
		int amount = reader.getInt();
		
		// 3. 구매가격과 적립포인트를 계산
		int totalPrice = price*amount;
		int point = (int)(totalPrice*0.02);
		
		// 4. 구매정보를 출력
		System.out.println("===================================");
		System.out.println("고객명: "+name);
		System.out.println("상품명: "+productName);
		System.out.println("상품가격: "+price);
		System.out.println("구매수량: "+amount);
		System.out.println("총구매가격: "+totalPrice);
		System.out.println("적립포인트: "+point);
		System.out.println("===================================");
		
		
	}

}
고객명: 홍길동
상품명: 키보드
상품가격: 50000
구매수량: 4
===================================
고객명: 홍길동
상품명: 키보드
상품가격: 50000
구매수량: 4
총구매가격: 200000
적립포인트: 4000
===================================

 

 

'수업내용 > Java' 카테고리의 다른 글

[2022.09.08.목] 배열  (0) 2022.09.08
[2022.09.07.수] switch문, 반복문  (0) 2022.09.07
[2022.09.06.화] 제어문과 반복문 (if문, for문)  (0) 2022.09.06
[2022.09.02. 금] 변수  (0) 2022.09.02
[2022.09.01.목] 오티  (1) 2022.09.01