int a; 정수형 변수 → 현재 쓰레기 값 들어가있음
int b = 20;
double c; 실수형 변수
String d = "apple"
클래스형 타입이 들어옴 → 클래스형 변수다 말하는게 맞음
→ but, 객체라고 부름(클래스의 주소값을 가지고 있다.)
→ 객체는 "apple"의 주소를 가지고 있다.
d도 변수 / 방이 생김 /
"apple"은 heap이라는 영역에 / 주소는 d변수가 담고있음.(언제든지 "apple"에 찾아갈 수 o)
방 안에 주소가 들어간 것.
a,b,c는 변수(방이 잡히면서 초기값이 들어가거나 쓰레기값이 들어감)
a.b.c는 Stack영역에 잡힘
연산자
1. 최우선 연산자
( ) ++ --
2. 산술연산자
+ - * / % (나머지 - 항이 반드시 정수형이어야 함.)
3. 관계연산자
> 크다
< 작다
>=
<=
==
!=
4. 논리연산자
- 조건이 2개 이상일 때
① && (AND) - 모든 조건이 참일 때 참
② || (OR) - 조건 중에서 1개라도 참이면 참
③ & (AND) - 모든 조건이 참일 때 참 (조건 두 개 다 해봐야해서 처리속도 차이 남)
④ | (OR) - 조건 중에서 1개라도 참이면 참
5. 조건연산자 (삼항 연산자)
[형식]
조건 ? 참 : 거짓 ;
6. 증감 연산자
++
7. 대입 연산자
+=
-=
*=
/=
%=
a=a+1 -> a+=1 -> ++a, a++
a=a-1 -> a-=1 -> --a, a--
선행 후행
ex)
int b = a++;
1. int b=a; b → 22
2. a++; a → 23
int c = ++a - b--;
1. ++a a → 24
2. a- b 24 -22
3. b-- b → 21
8. 부정(NOT) 연산자
!
true -> false
false -> true
bit 연산자 => 0 또는 1
1. ~ (bit NOT, 1의 보수)
0 -> 1
1 -> 0
2. bit 논리 연산자
① & (AND) - 모두 1일 때 1
② | (OR) - 1개라도 1이면 1
③ ^ (XOR) - 입력이 같으면 `0`, 다르면 `1`의 출력
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
|
&
(AND) |
|
(OR) |
^
(XOR) |
0 0
|
0
|
0
|
0
|
0 1
|
0
|
1
|
1
|
1 0
|
0
|
1
|
1
|
1 1
|
0
|
1
|
0
|
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
3. bit 이동연산자 - Shift 연산자
① <<
② >>
Scanner scan = new Scanner(System.in);
변수 scan Scanner
500번지
(주소가지고 있음)
[문제] 동전 교환
현금을 입력하여 천, 백, 십, 일의 개수를 구하시오
[실행결과]
현금 입력 : 5723
천원 : 5장
백원 : 7개
십원 : 2개
일원 : 3개
Operator01.java
package operator;
import java.util.Scanner;
public class Operator01 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); //키보드를 통해서 입력할 수 있는 클래스 생성
System.out.print("현금 입력 : ");
int money = scan.nextInt();
System.out.println("천원 : " + (money / 1000) + "장");
System.out.println("백원 : " + ((money%1000) / 100) + "개");
System.out.println("십원 : " + ((money%1000%100) / 10) + "개");
System.out.println("일원 : " + ((money%1000%100%10) / 1) + "개");
}
}
현금 입력 : 5723
천원 : 5장
백원 : 7개
십원 : 2개
일원 : 3개
[문제] 점수를 입력하여 합격인지 불합격인지 판별하는 프로그램
점수가 80~100 사이면 합격으로 한다.
Operator02.java
package operator;
import java.util.Scanner;
public class Operator02 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("점수 입력 : ");
int score = scan.nextInt();
System.out.println(score >= 80 && score <=100 ? "합격" : "불합격");
}
}
점수 입력 : 50
불합격
점수 입력 : 90
합격
Operator03.java
package operator;
public class Operator03 {
public static void main(String[] args) {
int a = 5;
a += 2; // a = a + 2
a *= 3; // a = a * 3
System.out.println("a=" +a); //a=21
a++;
System.out.println("a=" +a); //a=22
int b = a++;
System.out.println("a=" + a + " b=" + b); //a=23 b=22
int c = ++a - b--;
System.out.println("a=" + a + " b=" + b + " c=" + c); // a=24 b=21 c=2
System.out.println("a++=" + a++); // a++=24
System.out.println("a=" +a); //a=25
}
}
a=21
a=22
a=23 b=22
a=24 b=21 c=2
a++=24
a=25
Operator04.java
package operator;
public class Operator04 {
public static void main(String[] args) {
int num1=0, num2=0;
boolean result;
result = ( (num1+=10) < 0 && (num2+=10) > 0 ); //앞에가 거짓이므로 뒤에 수행 x
System.out.println("result = "+result); //result = false
System.out.println("num1 = "+ num1 + " num2 = "+ num2); // num1 = 10 num2 = 0
System.out.println();
result = ( (num1+=10) > 0 || (num2+=10) > 0 ); //결과가 뻔하면 뒤에꺼 수행x
System.out.println("result = "+result); //result = true
System.out.println("num1 = "+ num1 + " num2 = "+ num2); //num1 = 20 num2 = 0
}
}
result = false
num1 = 10 num2 = 0
result = true
num1 = 20 num2 = 0
★ && → 둘다 참일 때 참
(num1+=10) < 0 && (num2+=10) > 0
이 경우는 앞에가 이미 거짓이므로 뒤에꺼를 수행하지 않음.
num1 = 10 num2 = 0
★ || → 둘 중 하나라도 참이면 참
(num1+=10) > 0 || (num2+=10) > 0
이 경우는 앞에가 이미 참이므로 결과가 뻔해서 뒤에꺼를 수행하지 않음.
num1 = 20 num2 = 0
Operator05.java
package operator;
public class Operator05 {
public static void main(String[] args) {
boolean a = 25 > 36;
System.out.println("a = " + a); // false니까 a에는 0 들어감
System.out.println("!a = " + !a); // false니까 a에는 0 들어감
System.out.println();
String b = "apple"; // 변수 -> 객체 문자열은 메모리에/ 주소(시작위치)는 변수에 담김.
// b에는 apple이라는 글자가 아니라 주소를 주는 것
String c = "apple"; // 메모리에 문자열 잡히지 x 이미 똑같은거 있으므로
// b가 가리키는 주소 똑같이 가리킴.
// ex) tv가 한 대인데 리모콘이 두 개
String d = new String("apple"); // new라는 연산자를 쓰면 메모리에 계속 새로 만듦.
// String 안에 "apple" / d는 주소를 가짐.
//주소 비교 !! 문자열 비교아님.
System.out.println("b == c : " + (b == c ? "같다" : "다르다"));
//주소 비교
System.out.println("b == d : " + (b == d ? "같다" : "다르다"));
System.out.println();
//문자열 자체 비교
System.out.println("b.equals(c) : " + (b.equals(c) ? "같다" : "다르다"));
//문자열 자체 비교
System.out.println("b.equals(d) : " + (b.equals(d) ? "같다" : "다르다"));
System.out.println();
//문자열 자체 비교 -> 부정
System.out.println("!b.equals(c) : " + (!b.equals(c) ? "같다" : "다르다"));
//문자열 자체 비교 -> 부정
System.out.println("!b.equals(d) : " + (!b.equals(d) ? "같다" : "다르다"));
System.out.println();
}
}
a = false
!a = true
b == c : 같다
b == d : 다르다
b.equals(c) : 같다
b.equals(d) : 같다
!b.equals(c) : 다르다
!b.equals(d) : 다르다
[문제] 월급 계산 프로그램
이름, 직급, 기본급, 수당을 입력하여 합계, 세금, 월급을 출력하시오
합계 = 기본급 + 수당
세금 = 합계 * 세율
월급 = 합계 - 세금
[조건]
1. 세율 - 조건 연산자 이용
합계가 5,000,000원 이상이면 3% (0.03)
3,000,000원 이상이면 2% (0.02)
아니면 1% (0.01)
2. 숫자는 3자리마다 , 표시
3. 소수이하는 표시하지 않는다. (정수형)
4. Scanner 클래스 사용
[실행결과]
이름 입력 : 홍길동
직급 입력 : 부장
기본급 입력 : 4900000
수당 입력 : 200000
*** 홍길동 부장 월급 ***
기본급 : 4,900,000원
수당 : 200,000원
합계 : 5,100,000원
세금 : 153,000원
월급 : 4,947,000원
Salary.java
package operator;
import java.text.DecimalFormat;
import java.util.Scanner;
public class Salary {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
DecimalFormat df = new DecimalFormat();
System.out.print("이름 입력 : ");
String name = scan.next();
System.out.print("직급 입력 : ");
String job = scan.next();
System.out.print("기본급 입력 : ");
int basic = scan.nextInt();
System.out.print("수당 입력 : ");
int extra = scan.nextInt();
int tot = basic + extra;
double rate; //세율
rate = tot >= 5000000 ? 0.03 : tot >= 3000000 ? 0.02 : 0.01;
int tax = (int)(tot * rate);
int salary = tot - tax;
System.out.println("*** "+ name + " " + job + " 월급 ***");
System.out.println("기본급 : " + df.format(basic) + "원");
System.out.println("수당 : " + df.format(extra) + "원");
System.out.println("합계 : " + df.format(tot) + "원");
System.out.println("세금 : " + df.format(tax) + "원");
System.out.println("월급 : " + df.format(salary) + "원");
}
}
이름 입력 : 홍길동
직급 입력 : 부장
기본급 입력 : 4900000
수당 입력 : 200000
*** 홍길동 부장 월급 ***
기본급 : 4,900,000원
수당 : 200,000원
합계 : 5,100,000원
세금 : 153,000원
월급 : 4,947,000원
'JAVA' 카테고리의 다른 글
DAY 2 (0) | 2024.08.13 |
---|---|
DAY 3-2 if / Switch (2024.07.05) (0) | 2024.08.13 |
DAY 4 - 반복문 (2024.07.08) (0) | 2024.08.13 |
DAY 5 - 배열 / 선택정렬 / 버블정렬 (2024.07.09) (0) | 2024.08.13 |
DAY 6 - 다차원 배열 (2024.07.10) (0) | 2024.08.13 |