EADFF2 형광 색상 코드
9:20까지 - 각 자리수를 더한 값 나타내기 ( 나머지를 구해 누적하기 ) Accumulate678.java
나머지가 0이 될 때까지 반복하기
public static void main(String[] args) { //9:20까지
//변수, 누적, 연산자, 누적 ,몫
// 나머지를 구해 누적하기
int num = 687;
int answer = 0;
//나머지를 먼저 구하고
answer = answer + (num % 10);
//그 뒤에 몫을 구해야 한다,
num = num / 10;
// 68 --> 10으로 나눈 나머지 8
System.out.printf("num : %d, answer : %d\n", num , answer);
answer = answer + (num % 10);
num = num / 10;
System.out.printf("num : %d, answer : %d\n", num , answer);
answer = answer + (num % 10);
num = num / 10;
System.out.printf("num : %d, answer : %d\n", num , answer);
}
}
이렇게 세 번 반복해주어도 되지만 더 편한 방식인 반복문을 사용할 수 있다.
public class Accumulate687While {
public static void main(String[] args) {
int num=687;
int answer=0;
while(num > 0){
answer = answer + (num % 10);
num = num / 10;
System.out.printf("num : %d, answer : %d\n", num , answer);
}
}
}
배열에 있는 모든 값 더하기, length를 이용해 배열의 길이 구하기 -9:28 까지 실습
public class SumOfValues {
public static void main(String[] args) { // 배열에 있는 모든 값 더하기
int answer = 0;
int[] arr = {2,1,7,4};
answer = answer + arr[0];
answer = answer + arr[1];
answer = answer + arr[2];
answer = answer + arr[3];
System.out.printf("%d\n", answer);
System.out.printf("%d",arr.length);
// System.out.println(arr[0]);
// System.out.println(arr[1]);
// System.out.println(arr[2]);
// System.out.println(arr[3]);
//
// System.out.println(arr[0]+arr[1]+arr[2]+arr[3]);
}
}
복합 대입 연산자
복합 대입 연산자 예제 실습 (CompundAssignmentOperator.java) - 9:35분 까지
public class CompundAssignmentOperator {
public static void main(String[] args) {
int x = 10;
x += 1;
System.out.printf("+=1 %d\n", x);
x -= 5;
System.out.printf("-=5 %d\n", x);
x *= 2;
System.out.printf("*=2 %d\n", x);
x /= 3;
System.out.printf("/=3 %d\n", x);
x %= 8;
System.out.printf("%%= 8 %d\n", x);
}
}
복합대입연산자를 이용해 누적값 구하기 예제 (Accumulate687Compound.java) -9:48분 까지
public static void main(String[] args) {
int num = 687;
int answer = 0;
//1. 나머지 2. 몫
answer += num % 10; //answer = answer + (num % 10)
num /= 10; // num = num / 10
answer += num % 10;
num /= 10;
answer += num % 10;
num /= 10;
System.out.println(answer);
}
}
+ 복합연산자는 print에 찍히지 않음. 찍혀도 우리가 원하는 값이 나오지 않는다.
증감연산자
증(Increase) 연산자 i++, ++i가 있고,
감(Decrease)연산자 i--, --i가 있다. (총 네 가지)
i = i + 1, i = i - 1 → i++, i--
i++ | 쓰고 나서 증감 |
++i | 증가 시키고 사용 |
증감 연산자 사용법 예제
public class IncreaseOperator {
public static void main(String[] args) {
int i = 10;
System.out.println(i++);
}
}
결과는 10
public class DecreaseOperator {
public static void main(String[] args) {
int i = 10;
//--가 뒤에 오는 경우 = 은행에서 빌린 돈 .후이자. 나중에 뗀다
System.out.println(i--);
System.out.println(i);
System.out.println("-------------감소---------------");
System.out.println(--i); // 일단 떼고 준다.
System.out.println(i);
}
}
증감연산자 배열에서 사용
public class IncreaseFirst {
public static void main(String[] args) {
//배열 연산 시 사용
int idx = 0;
int[] arr = {2,1,7,4};
System.out.println(arr[idx]); // idx=0, 첫번째 인덱스인 2가 출력 됨
idx += 1; //idx=0 에서 1을 더한다.
System.out.println(arr[idx]); //dx = 1, 두번째 인덱스인 1이 출력 됨
idx += 1; // idx=1 에서 1을 더 더함
System.out.println(arr[idx]); //idx=2, 세번째 인덱스인 7이 출력 됨
}
}
한 줄로 정리하기
public class IncreaseFirst2 {
public static void main(String[] args) {
int idx = 0 ;
int[] arr = {2,1,7,4};
System.out.println(arr[idx++]);
System.out.println(arr[idx++]);
System.out.println(arr[idx++]);
}
}
배열에는 +=1 을 사용할 수 없지만 i++은 배열값에 접근할 때 사용 가능하다.
배열에서 증감연산 사용하기 활용 (+for문으로도 풀어보기)
public class IncreaseFirst3 {
public static void main(String[] args) {
int idx = 0;
int[] arr = {2,1,7,4};
System.out.println(arr[idx++]); //0에서 시작하여 2 출력 후 1++
System.out.println(arr[idx++]); // ++되어 두번째 인덱스인 1이 출력 후 1++
System.out.println(arr[idx--]); // ++되어 세번째 인덱스인 7이 출력 후 1--
System.out.println(arr[idx--]); // --되어 두번째 인덱스인 1이 출력 후
System.out.println(arr[idx]); // --되어 첫번째 인덱스인 0이 출력 된다.
System.out.println("----------------------------------");
System.out.println(arr[idx++]); //0에서 1 더하기
System.out.println(arr[++idx]); //1 더한것과 먼저 증감되어 세번째 인덱스인 7이 출력 됨
System.out.println(arr[idx]); // 이후로 더하거나 마이너스 된 것이 없기 때문에 똑같이 7이 출력 됨
}
}
비교연산자 (Comparison Operator)
- 두 개의 값을 비교하여 결과를 논리값(boolean) 으로 알려주는 연산자
public class ComparisonOperatorsEx2 {
public static void main(String[] args) {
int iVal1 = 10;
int iVal2 = 20;
System.out.printf("iVal1 == iVal2 : %b\n", iVal1 == iVal2); //같냐
System.out.printf("iVal1 != iVal2 : %b\n", iVal1 != iVal2); //다르냐
System.out.printf("iVal1 < iVal2 : %b\n", iVal1 < iVal2); //2가 1보다 크냐
System.out.printf("iVal1 <= iVal2 : %b\n", iVal1 <= iVal2); //2가 1보다 크거나 같냐
System.out.printf("iVal1 > iVal2 : %b\n", iVal1 > iVal2); //1이 2보다 크냐
System.out.printf("iVal1 >= iVal2 : %b\n", iVal1 >= iVal2); //1이 2보다 크거나 같냐
}
}
배열 인덱스 값 비교하기
- 버블정렬 알고리즘을 풀 때도 사용한다.
import java.util.Arrays;
public class ComparisonArray {
public static void main(String[] args) {
//버블정렬 예제. 앞에것과 비교하여 나보다 크면 뒤로 보내 정렬하기
int[] arr = {2,1,7,9};
System.out.printf("%d > %d --> %b \n", arr[0], arr[1], arr[0]>arr[1]);
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
System.out.println(Arrays.toString(arr));
System.out.printf("%d > %d --> %b \n", arr[1], arr[2], arr[1]>arr[2]);
System.out.printf("%d > %d --> %b \n", arr[2], arr[3], arr[2]>arr[3]);
System.out.println(Arrays.toString(arr));
}
}
버블정렬을 이용해 오름차순으로 정리가 된 것을 확인할 수 있다.
논리 연산자 (Logical Operator)
논리 연산자는 세가지 종류가 있으며 위 사진과 같이 표현한다.
- &한개만 쓰는 경우
: 한개가 false가 나와도 뒤에 값을 검사하며, 조건을 둘 다 검사
ex) num1 == 0 & num2 == 0;
- &&두개씩 쓰는 경우 (추천!!)
: 한개라도 false 이면 false 인 경우이며, 앞에 false가 나오면 뒤에 값은 계산할 필요가 없다.
AND 연산자 ( && )
public class LogicalOperatorEx {
public static void main(String[] args) {
int age = 25;
boolean isStudent = false;
if(age >= 18 && !isStudent){ //&& -> AND 연산자로 모두 참인지를 확인
System.out.println("성인이며, 학생이 아닙니다.");
}
}
}
if문에서 조건에 맞는 나이 18살 이상이고, 학생이 아닐 경우 printf 문이 출력된다.
boolean 값과 if 문은 같은 값이어야 실행이 되므로 boolean isStudent = true 여도 if 문에서 age >= 18 %% isStudent면 돌아간다.
때문에 학생이 아닌 것을 증명해야하므로 isStudent는 false를 넣고, if문에서도 !isStudent (=not student) 상태로 만들어줘야 한다.
.printf()에서 학생이 아닌 것을 출력하기 위해서는.
보일러 컨트롤러 예제
public class BoilerControl {
public static void main(String[] args) {
int waterTemperature = 45;
int roomTemperature =22;
//둘 다 50보다 낮으면 보일러를 틀어야 함
boolean result = (waterTemperature < 50 && roomTemperature < 50 ? true : false);
System.out.println(result == true ? "보일러 켜세요" : "보일러 안 켜도 됨");
}
}
OR ( || )연산
public class OrEx {
public static void main(String[] args) {
boolean result = true || true;
System.out.printf("%b\n", result);
result = true || false;
System.out.printf("%b\n", result);
result = false || true;
System.out.printf("%b\n", result);
result = false || false;
System.out.printf("%b\n", result);
}
}
코드 결과와 같이 하나라도 true 가 있다면 true를 출력한다.
NOT ( ! )연산
public class NotEx {
public static void main(String[] args) {
boolean result = !true;
System.out.printf("%b\n", result);
result = !false;
System.out.printf("%b\n", result);
}
}
boolean 값을 반대로 바꿔주는 연산이다.
성인 판단 예제 NOT 버전
public class CheckWhetherAdult {
public static void main(String[] args) {
int age=30;
boolean isAdult = age >= 18; //만 18세 이상
System.out.printf("미성년자입니까? %b", !isAdult);
}
}
boolean 값에 age가 18살과 같거나 보다 높다면 성인(isAdult)이다. 라는 값을 넣었다.
.printf 질문에서 미성년자입니까? 라고 물었기 때문에 부정해줘야 한다. isAdult는 age가 18살과 같거나 보다 많기 때문이다.
비트연산
| (OR연산자) : 피연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻는다. 그 외에는 0을 얻는다.
& (AND연산자) : 피연산자 양 쪽의 값이 모두 1이어야만 1을 결과로 얻는다. 그 외에는 0을 얻는다.
^(XOR연산자) : 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다. 같을 때는 0을 얻는다.
다음 예제는 쉬프트 연산자를 이용해 자리를 이동할 수 있다. (2진수로 표현했을 때)
2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
public class BitOperatorEx {
public static void main(String[] args) {
int val1 = 1;
System.out.println(val1 << 1);//올리기
System.out.println(val1 << 2);
int val2 = 32;
System.out.println(val2 >> 1); //내리기
System.out.println(val2 >> 2);
}
}
비트연산자 예제 2
public class BitOperatorEx2 {
public static void main(String[] args) {
int val1 = 1; //-2
int val2 = 0; //-1
int val3 = 3; //-4
System.out.println(~val1);
System.out.println(~val2);
System.out.println(~val3);
System.out.println(Integer.toBinaryString(~val1));
System.out.println(Integer.toBinaryString(~val2));
System.out.println(Integer.toBinaryString(~val2));
}
}
"~" 는 단항 연산자로서 피연자의 모든 비트를 반전시킨다.
위 코드를 예시로 들어, val1 = 1; 은 사실 2진수로 표현한다면 32비트의 00000000 00000000 00000000 00000001 이기 때문에
~연산자로 뒤집을 시 아래 결과 사진과 같이 11111111 11111111 11111111 11111110 으로 나오며 다른 val2, val3도 마찬가지로
val2 : 00000000 00000000 00000000 00000000
val3 : 00000000 00000000 00000000 00000011 이다.
비트연산자의 AND 연산자 ( & )로
모두 다 참(True, 1)일 때만 1로 출력된다.
비트 연산자의 OR 연산자( | )로
하나라도 참(True, 1)라면 1을 출력한다.
비트 연산자의 XOR 연산자(^)로
True , True 혹은 false, false 일 때는 거짓(false, 0)을 출력하고
서로 다른 값이 들어 있을 때 참(True, 1)을 출력한다.
.printf() 사용 할 때 여러개 출력 시 \n 매번 입력하기 구차늘때
Intellij 설정( cmd + , ) > Live Template 검색 > Java > souf 찾아서 텍스트에 \n추가해주면 자동으로 나타난다!
'study' 카테고리의 다른 글
(230501) JAVA - For문 / 코드업 문제 풀이 (0) | 2024.07.25 |
---|---|
(230428) Java - 제어문 (0) | 2024.07.25 |
(230426) JAVA - 인스턴스화, Swap예제 (0) | 2024.07.25 |
(230425) Java / Codeup 1037까지 (0) | 2024.07.25 |
(230424) Java - 타입변환 (0) | 2024.07.25 |