1. 반올림 : Math.round()
Math 라이브러리는 각종 계산 관련 클래스들이 모여있는 라이브러리. 말 그대로 수학 계산을 위한 계산기 라이브러리라고 생각하면 쉬울 듯.
여기서 Math.round() 클래스는 실수를 소숫점 첫 째 자리에서 반올림한 정수를 반환하는 클래스
기본 : Math.round(실수 숫자);
int a = 15;
float b = 3.3f;
float c = a/b;
System.out.println(c); // 결과 : 4.5454545
// 첫 째자리에서 반올림
double d = Math.round(c);
System.out.println(d); // 결과 : 5
// 3번째 자리에서 반올림
float d = Math.round(c*100)/100.0f; // *100 / 100.0 을 하는 이유?
c = 4.5454545 인 상태에서 단순히 Math.round() 만 사용하면 첫째자리에서 반올림 되기 때문에 자연수 5가 출력됨.
이때 c *100 을 하면 454.5454545 가 나오고 여기서 Math.round() 를 사용하면 455 가 출력됨.
이후 다시 /100.0 을 하게되면 4.55가 출력됨. 100.0 인 이유는 int / int 가 아닌 int / float 가 되도록 만들기 위해서
결과적으로 4.5454545 의 소숫점 3번째 자리에서 반올림한 결과가 출력됨
System.out.println(e); // 결과 : 4.55
// 4번째 자리에서 반올림
float e = Math.round(c*1000)/1000.0;
System.out.println(e); // 결과 : 4.545
- 번외 : 특정 소숫점 자리수까지만 표현
import java.text.DecimalFormat 사용
DecimalFormat form = new DecimalFormat("#.###");
// 클래스 선언 이때 정수부분의 #은 하나만 있어도 십의자리 백의자리 모두 표현 가능, 소숫점 이하 #은 원하는 자리수 까지만 표현하면됨
double haha = 3.141592;
System.out.println(form.format(result)); // 요런식으로 사용
2. 비교 연산자 > < ≥ ≤ == ≠
비교 연산자 | 연산 결과 |
> | 좌변 값이 크면 true, 아니면 false |
< | 좌변 값이 작으면 true, 아니면 false |
>= | 좌변 값이 크거나 같으면 true 아니면 false |
<= | 좌변 값이 작거나 같으면 true 아니면 false |
== | 두 값이 같으면 true 아니면 false |
!= | 두 값이 다르면 true 아니면 false |
- 두 피 연산자(숫자형)를 비교해서 ture참 또는 false거짓을 반환
- 문자열 비교에는 == 대신 비교 [문자열 변수].equals([비교하고 싶은 문자열 변수]) 를 사용해야 한다.
public static void main(String[] args) {
String a = new String("하하"); // String 만든는 방식은 이렇게도 사용
String b = new String("하하");
String str1 = "하하";
String str2 = "하하";
System.out.println(a==b); // false 출력
System.out.println(a.equals(b)); // 이렇게하면 true
System.out.println();
System.out.println(str1==str2); // 여기는 true
System.out.println(str1.equals(str2)); // 여기도 true
System.out.println();
System.out.println(str1.equals(a)); // 여기는 true
System.out.println(str1==a); // 여기는 false
}
- 왜 == 는 false 가 나오고, equals() 했을 때는 true 가 나오는지에 대한 차이는 쉽게 이야기해서 "내용" 을 비교하는지 아니면 "주소값"을 비교하는지에 따라 차이가 있다고 한다.
' == '연산자의 경우에는 비교하는 피 연산자의 주소값을 비교해서 결과를 출력하는 반면, equals() 는 단순히 주소값이 아니라 피 연산자의 "내용"을 비교해서 출력한다고 생각하면 된다.
이때 또 한 가지 추가로 알 수 있는 것은 String a = "하하" 라고 선언 했을 때와 String a = new String("하하") 라고 선언 했을 때가 서로 다른 주소값을 갖는다 라는 점인데, 이에 대해서는 나중에 좀 더 적어보도록 하겠다.
3. 논리 연산자 && ||
조건식을 연결 할 때 사용하는 연산자
- || (OR 결합) : 피연산자 중 어느 한 쪽이 TRUE면 TRUE 를 결과로 얻는다.
- && (AND결합) : 피연산자 양쪽 모두 TRUE 이여야 TRUE를 결과로 얻는다.
X | Y | X || Y | X && Y |
TURE | TRUE | TRUE | TRUE |
TRUE | FALSE | TRUE | FALSE |
FALSE | TRUE | TRUE | FALSE |
FALSE | FALSE | FALSE | FALSE |
1) X 는 10보다 크고, 20보다 작다.
- 위 문장은 그리고(AND)로 연결된 조건임으로 다음과 같이 표현이 가능하다 ⇒ 10<X && X<20
2) I 는 2의 배수 또는 3의 배수이다.
- 어떤 수가 의 배수라는 얘기는 2로 나누었을 때 나머지가 0이라는 뜻이다. 그래서 나머지 연산의 결과가 0인지 확인하면 된다. '또는' 으로 두 조건이 연결되었으므로 논리 연산자 '||' 를 사용해야 한다 ⇒ I%2==0 || I%3==0
- 번외 : 만약 2와 3의 공배수를 찾는 경우라면 아래와 같이 표현이 가능하다. 코드로는 이렇게 표현이 가능 할 듯?
static void calculation() {
int i;
for(i=1; i<20; i++) {
if(i%2==0 && i%3==0) {
System.out.println(i);
}
}
}
3) i 는 2의 배수 또는 3의 배수지만 6의 배수는 아니다.
- 2의 배수 또는 3의 배수 조건에 6의 배수가 아니라는 조건이 하나 더 붙었다. 이는 곧 i%6≠0 의 의미이고 이 조건을 && 로 연결해야 한다. ⇒ (i%2==0 || i%3==0) && i%6≠0
- 이때 괄호를 넣은 이유는 && 가 || 보다 우선순위가 높기 때문이다. 만약 괄호가 없다면 && 를 먼저 연산하게 된다.
4) 문자 ch 는 숫자 '0' ~ '9' 이다.
- 사용자로부터 입력된 문자가 숫자 0 ~ 9 인지 확인하는 식은 다음과 같이 쓸 수 있다.
- '0' ≤ ch && ch≤'9'
- 유니코드에서 문자 0 부터 9 까지 연속적으로 배치되어 있기 때문에 가능한 식이다. 문자 '0' 부터 '9' 까지의 유니코드에 대한 내용은 전 글을 참고한다.
5) 문자 ch 는 대문자 또는 소문자 이다.
앞서 4) 와 마찬가지로 문자 'a' 부터 'z' 까지, 그리고 'A' 부터 'Z' 까지도 연속적으로 배치되어 있으므로 문자 ch 가 대문자 또는 소문자인지 확인하는 식은 다음과 같이 쓸 수 있다.
- ('a' ≤ ch && ch ≤ 'z') || ('A' ≤ ch && ch ≤ 'Z')
4. 논리 부정 연산자 !
true 를 false 로 , false 는 true 로 바꾼다.
- boolean b = true; , !!b → !!true → !false → true
- 'ch' < 'a' || ch > 'z' == !('a' ≤ ch && ch ≤ 'z')
5. 조건 연산자 ? :
- 조건식의 결과에 따라 연산 결과를 달리한다.
- 유일한 3할 연산자
- 조건식 ? 식1 : 식2 ⇒ 참이면 '식1' 계산 출력 , 거짓이면 '식2' 계산 출력
- result = (x > y) ? x : y; // 괄호 생략 가능 ⇒ 만약 true 면 result = x , false 면 result = y
static int tree_calculation() {
int x = 5;
int y = 6;
int result;
result = (x>y)?x:y;
return result;
}
System.out.println(tree_calculation()); // result = 6
6. 대입 연산자 =
- 오른쪽 피연사자를 왼쪽 피연산자에 저장 후 저장된 값을 반환
- 모든 연산자는 결과값을 반환
- 오른쪽에서 왼쪽으로 연산 진행!!!
- lvalue : 대입 연산자의 왼쪽 피연산자 ⇒ 변수, 배열 등의 저장 공간이 와야함.
- rvalue : 대입 연산자의 오른쪽 피연산자
7. 복합 대입 연산자
대입 연산자와 다른 연산자를 하나로 축약
op= | = |
i +=3; | i = i + 3; |
i -=3; | i = i -3; |
i *=3; | i = i*3; |
i /=3; | i = i/3; |
i %=3; | i = i%3; |
i <<=3; | i = i << 3; |
i >>=3; | i = i >>3; |
i &=3; | i = i & 3; |
i ^=3; | i = i ^ 3; |
i |=3; | i = i | 3; |
i *=10+j; // 매우매우 중요 | i = i*(10+j); // 매우매우 중요 |
'Java - 기본기' 카테고리의 다른 글
6. 조건문과 반복문 기초&활용 (1) (0) | 2021.09.27 |
---|---|
Java 입출력(I/O), 스트림(Stream), 버퍼(Buffer) 개념 및 사용법 (2) | 2021.09.26 |
4. 증감 연산자, 부호 연산자, 형변환 , 자동 형변환 + 아스키코드 (0) | 2021.09.13 |
3. Scanner 사용, 정수형 오버플로우, 타입 간 변환, 연산자와 종류 (0) | 2021.09.09 |
2. 변수 다루기 - 기본형 심화, printf 를 이용한 출력, 입력 받기 (1) | 2021.09.02 |
댓글