* 생각해보니, public class에 파일 이름이 있었네? 더이상 주석으로 파일 이름 안 달아도 되겠다..
(여태 뻘짓했구나.. 코드초보는 또 하나 배웁니다..또르륵)
* 개념을 여기에 다 쓰기엔 여백과 시간이 부족해, 자세한 설명은 생략한다.
여기엔 코드와 주석 위주로 작성하겠다.
단항 연산자
- 부호 연산자 (Sign Operator)
public class SignOperatorExample {
public static void main(String[] args) {
int x = -100;
int result1 = +x;
int result2 = -x;
System.out.println("result1= " + result1);
System.out.println("result2= " + result2);
short s = 100;
// short result3 = -s; //부호 연산자의 산출 값은 int 타입이어야 하므로 error
int result3 = -s; // promotion 통한 부호 연산자와 s 저장
System.out.println("result3=" + result3);
}
}
- 증감 연산자 (Increase, Decrease Operator)
public class IncreaseDecreaseOperator {
public static void main(String[] args) {
int x = 10;
int y = 10;
int z;
System.out.println("---------------------");
x++;
++x; // x++이든 ++x이든 똑같이 1 증가시킴
System.out.println("x=" + x);
System.out.println("---------------------");
y--;
--y; // y++이든 ++y이든 똑같이 1 증가시킴
System.out.println("y=" + y);
System.out.println("---------------------");
z = x++; // 현재 x값을 z에 저장한 뒤에 1 증가
System.out.println("z=" + z);
System.out.println("x=" + x);
System.out.println("---------------------");
z = ++x; // 1 증가한 뒤에 현재 x값을 z에 저장
System.out.println("z=" + z);
System.out.println("x=" + x);
System.out.println("---------------------");
z = ++x + y++; // 1 증가한 x와 현재 y값을 연산 후, y는 1 증가되어 저장
System.out.println("z=" + z);
System.out.println("x=" + x);
System.out.println("y=" + y);
}
}
- 논리 부정 연산자 (Deny Logic Operator)
public class DenyLogicOperatorExample {
public static void main(String[] args) {
boolean play = true; // 현재 play 값 true 선언
System.out.println(play);
play = !play; // 현재 play 값 false 반전
System.out.println(play);
play = !play; // 현재 play 값 true 반전
System.out.println(play);
}
}
이항 연산자
- 산술 연산자 (Arithmetic Operator)
public class ArithmeticOperatorExample {
public static void main(String[] args) {
int v1 = 5;
int v2 = 2;
int result1 = v1 + v2; // 덧셈
System.out.println("result1=" + result1);
int result2 = v1 - v2; // 뺄셈
System.out.println("result2=" + result2);
int result3 = v1 * v2; // 곱셈
System.out.println("result3=" + result3);
int result4 = v1 / v2; // 나눗셈
System.out.println("result4=" + result4);
int result5 = v1 % v2; // 나눈 뒤 나머지 값
System.out.println("result5=" + result5);
double result6 = (double) v1 / v2; // 나눗셈 후 값 실수로 casting
System.out.println("result6=" + result6);
}
}
* Char 타입의 연산
public class CharOperationExample {
public static void main(String[] args) {
char c1 = 'A' + 1;
char c2 = 'A';
// char c3 = c2 + 1;
// c2 + 1의 값은 int 타입으로 변환되기 때문에, char 타입인 c3에 저장할 수 없다.
char c3 = (char) (c2 + 1); // c2 + 1 계산한 int 값을 char로 casting 후 c3에 저장
System.out.println("c1: " + c1);
System.out.println("c2: " + c2);
System.out.println("c3: " + c3);
}
}
* Overflow 발생 및 해결
public class OverflowExample {
public static void main(String[] args) {
// Overflow 예시
int x = 1000000;
int y = 1000000;
int z = x * y;
System.out.println(z); // int 타입 범위 초과로 Overflow 발생
// 해결1_Casting
int a = 1000000;
int b = 1000000;
long c = (long) a * b;
System.out.println(c);
// 해결2_변수 타입을 Long으로 변환
long d = 1000000;
long e = 1000000;
long f = d * e;
System.out.println(f);
}
}
* NaN(Not a Number) 및 Infinity(무한대) 연산
public class InfinityAndNaNCheckExample {
public static void main(String[] args) {
int x = 5;
double y = 0.0;
double z = x / y;
// /와 % 연산의 결과가 Infinity 또는 NaN인지 확인하려면 아래의 method를 사용하면 된다.
System.out.println(Double.isInfinite(z)); // Infinity 확인 method
System.out.println(Double.isNaN(z)); // NaN 확인 method
System.out.println(z + 2); // infinity + 2 = infinity
}
}
** NaN 값이 나오면 원래 데이터에 NaN을 저장하지 않도록 조사 후 실행하게 해야 한다.
public class InputDataCheckNaNExample {
public static void main(String[] args) {
String userInput = "NaN";
double val = Double.valueOf(userInput);
double currentBalance = 10000.0;
// NaN일 경우 실행되는 코드
if (Double.isNaN(val)) {
System.out.println("NaN이 입력되어 처리할 수 없음");
val = 0.0; // val 값 초기화
}
// NaN이 아닐 경우 실행되는 코드
currentBalance += val;
System.out.println(currentBalance);
}
}
- 문자열 연결 연산자(+)
피연산자 중 한 쪽이 문자열이면, + 연산자는 문자열 연결 연산자로 사용되어
다른 피연산자를 문자열로 변환하고 서로 결합한다.
public class StringConcatExample {
public static void main(String[] args) {
String str1 = "JDK" + 6.0; // 피연산자에 문자열 JDK가 있으므로 +는 연결 연산자로 사용됨
String str2 = str1 + "특징";
System.out.println(str2);
String str3 = "JDK" + 3 + 3.0;
String str4 = 3 + 3.0 + "JDK";
System.out.println(str3);
System.out.println(str4);
}
}
- 비교 연산자(==, != 등등)
public class CompareOperatorExample {
public static void main(String[] args) {
int v2 = 1;
double v3 = 1.0;
System.out.println(v2 == v3);
// v3이 double이므로, v2도 큰 타입인 double로 바꿔 비교해 true 출력됨
double v4 = 0.1;
float v5 = 0.1F;
System.out.println(v4 == v5);
/*
* 0.1F는 0.1의 근사값, 즉 정확한 0.1이 아닌 0.1000000149011612...이런 식이 되므로 false 출력됨
* double로 바꾸면 v4가 0.1의 근사값, 즉 정확한 0.1이 아닌 0.1000000149011612...가 출력되므로
* float으로 casting 한 이후 비교 연산을 해야 올바른 값을 산출할 수 있다.
*/
// 올바른 예
System.out.println((float) v4 == v5);
// 또는(소숫점 자리를 10 곱해 없앤 후 비교)
System.out.println((int) (v4 * 10) == (int) (v5 * 10));
}
}
** (중요) String 객체의 문자열만을 비교하고 싶으면 ==을 쓰면 안 된다.(==은 문자열의 주소값이 같은지 비교하게 됨)
equals() method를 써야 한다.
public class StringEqualsExample {
public static void main(String[] args) {
String strVar1 = "Chaarles";
String strVar2 = "Chaarles";
String strVar3 = new String("Chaarles");
System.out.println(strVar1 == strVar2);
System.out.println(strVar1 == strVar3); // 주소값이 다르므로 false 출력
System.out.println();
// 문자열 비교하는 올바른 방법
System.out.println(strVar1.equals(strVar2));
System.out.println(strVar1.equals(strVar3));
}
}
//알파벳 하나를 입력 후 대/소문자 판별해 출력
import java.util.Scanner;
public class LogicalOperatorExercise {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("알파벳 하나를 입력하세요>");
String value1 = sc.next();
char value2 = value1.charAt(0);
// java scanner는 character를 입력받는 기능이 없다.
// 문자열 받은 뒤, charAt로 꺼내와야 한다.
if ((value2 >= 'A') && (value2 <= 'Z')) {
System.out.println("대문자입니다.");
}
if ((value2 >= 'a') && (value2 <= 'z')) {
System.out.println("소문자입니다.");
} else {
System.out.println("올바른 값을 입력하세요.");
}
}
}
// 실행문이 계속 반복되게 하는 방법도 생각해보자
'Java > Learn_Java' 카테고리의 다른 글
4. 조건문과 반복문_활용문제 (0) | 2020.03.29 |
---|---|
3. 연산자_연습문제 (0) | 2020.03.29 |
2. 변수와 타입_3. 타입 변환 (0) | 2020.03.28 |
2. 변수와 타입 (0) | 2020.03.28 |
Intro (0) | 2020.03.28 |