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 |