2023.10.13.<Java>문법2_연산자, 조건문/반복문, 배열

2023. 10. 13. 19:49콛/Til

Chapter 3 : 계산하기(연산자)

 

○ 인텔리제이 내에서 폴더 만드는 법

 - src폴더에서 우클릭 → new →  Package(자바에서는 폴더를 패키지라고 칭한다)

 - 새로운 파일 만들면 class 안에 『public static void main(String[] args)』 넣어주고 시작한다.

  → main 클래스 안에서 main 메소드가 먼저 실행되기 때문에

  → sout 선언 가능

 

*  비교연산자

 - System.out.println( 1 < 3 < 5); : 한번에 세가지를 비교하는 것은 불가능하다!

 

*  논리 부정 연산자

  -  System.out.println(!( 5==5)); : not연산자 사용 시 주의

 

* 대입연산자에서 주의해야 할 점!

 - 변수 뒤에 붙는 연산자는 = 이 끝난 뒤에 계산된다. 아래와 같은 경우 val = 11 + 10 으로 21이 나온다.

int a = 10;
int b = 10;
int val = ++a + b--;
System.out.println(val);

 

○ 삼항연산자

 - 비교연산자와 함께 씀

 - 비교연산자의 결과 ? true : false; 

//기본형식
int x = 1;
int y = 9;
boolean b =(x == y ) ? true : false;
System.out.println(b);

 

//응용
int max = (x >y) ? x :y;
System.out.println(max);

String s = (x != y) ? "정답" : "오답";
System.out.println(s);

 

○ 비트 연산

 - '<<' : 왼쪽으로 자리수 옮기기, '>>' : 오른쪽으로 자리수 옮기기

 - 2진수이기 때문에 왼쪽으로 옮기기 : 2의 배수로 곱하기, 오른쪽으로 옮기기 : 2의 배수로 나누기

 - 컴퓨터의 가장 작은 단위인 Bit 이기 때문에 제일 빠르다.

System.out.println(3 << 2); //12
// 1. 3은 이진수로 11
// 2. 11을 왼쪽으로 <<2 옮기기
// 3. 이진수 1100은 십진수 12

System.out.println(3 << 1); //6
//1. 3은 이진수로 11
//2. 11으로 오른쪽으로 1 옮기기
//3. 이진수 110은 십진수 6

 

Chapter 4 : 조건문, 반복문

○ 조건문 if

//기본형태
if (조건) {
    참일 경우 수행할 명령
        } else {
    
        } 거짓일 경우 수행할 명령
//else if문
if (조건1) {
    참일 경우 수행할 명령
        } else if(조건2) {
     조건1 fales 이고 조건2 true일 떄 수행할 문장
        } else {
    조건1, 조건2 flase일 때 수행할 문장
        }

 

○ 중첩 if 문

 - if 안에 if, else if, else를 넣어서 중첩으로 if문을 만들 수 있다.

 - 중첩 if문 예시

더보기

☆가위바위보 프로그램 만들기☆

System.out.println("A 입력 : ");
String aHand = sc.nextLine();

//B입력
System.out.println("B 입력 : ");
String bHand = sc.nextLine();

//두개의 값을 비교하는 메서드 -> Objects.equals (좌, 우)

if (Objects.equals(aHand, "가위")) {
    if (Objects.equals(bHand, "가위")) {
        System.out.println("비겼습니다.");
    } else if (Objects.equals(bHand, "바위")) {
        System.out.println("B가 이겼습니다.");
    } else if (Objects.equals(bHand, "보")) {
        System.out.println("A가 이겼습니다.");
    } else {
        System.out.println("B가 잘못된 값을 냈습니다.");
    }
} else if (Objects.equals(aHand, "바위")) {
    if (Objects.equals(bHand, "가위")) {
        System.out.println("A가 이겼습니다.");
    } else if (Objects.equals(bHand, "바위")) {
        System.out.println("비겼습니다.");
    } else if (Objects.equals(bHand, "보")) {
        System.out.println("B가 이겼습니다.");
    } else {
        System.out.println("B가 잘못된 값을 냈습니다.");
    }
} else if (Objects.equals(aHand, "보")) {
    if (Objects.equals(bHand, "가위")) {
        System.out.println("B가 이겼습니다.");
    } else if (Objects.equals(bHand, "바위")) {
        System.out.println("A가 이겼습니다.");
    } else if (Objects.equals(bHand, "보")) {
        System.out.println("비겼습니다.");
    } else {
        System.out.println("B가 잘못된 값을 냈습니다.");
    }
} else {
    System.out.println("A가 잘못된 값을 냈습니다.");
}

 

○ Swich 문

 - if문과 비슷하지만 좀더 가독성이 좋다.

 - case문과 함께 사용 → break 

 - defalt로 모든 값이 not일 경우 지정

- Swich 문 예시

더보기
int month = 8;
String monthString = ""; //초기값 빈 값으로 지정

switch (month) {
    case 1:
        monthString = "1월";
        break;
    case 2:
        monthString = "2월";
        break;
    case 3:
        monthString = "3월";
        break;
    case 4:
        monthString = "4월";
        break;
    case 5:
        monthString = "5월";
        break;
    case 6:
        monthString = "6월";
        break;
    case 7:
        monthString = "7월";
        break;
    case 8:
        monthString = "8월";
        break;
    case 9:
        monthString = "9월";
        break;
    case 10:
        monthString = "10월";
        break;
    case 11:
        monthString = "10월";
        break;
    case 12:
        monthString = "12월";
        break;
    default:
        monthString = "알 수 없음";
}
System.out.println(monthString);

 

○ If vs Swich

 - if 문은 () 안에 조건 여러개 지정 가능 → 복합조건 가능

 - 코드중복 : if문 ↑ / swich문 ↓

 

○ 반복문 - for

 - 연산을 반복해서 수행하고 싶을 경우 사용한다. (i ++ 이부분 나중에 실행되는 것 인지하기)

//for문
for (int i = 0; i<4 ;i++) {
    System.out.println(i +"번째 출력");
}

//향상된 for문 (배열)
int[] numbers = {3, 6, 9, 12, 15};
for (int number : numbers) {
    System.out.print(number);
}

 

○ 반복문 - while, do-while

- 무한루프 주의

- while (조건문) { (연산)}

- do {(연산)} while (조건문)

더보기
//while문
int number = 0;
while(number < 3 ) {
    number++;
    System.out.println(number+"번째 실행 후 출력");
}

//do-while문
int number =5;
do {
    System.out.println(number+"출력");
}while(number < 2);

 

○ break, continue

 - break : 가장 가까운 블럭의 for문 또는 while문, switch문을 중단함

 - for : while문 안에서 해당순서 패스하고싶을 때 사용 → (출력패스하고싶을 때)

 

Chapter 5 : 배열

○ 선언방법

 - int intArray [];

 - int [] intArray = ; : 이게 일반적인 방식

 ( 초기값 : int = 0, boolean = false, String =null...)

 - 배열의 순회

 int[] intArray = new int[3]; //배열의 생성
 
// (1) 단건 조회
    System.out.println(intArray[0]);

// (2) 다건 조회(important)
    for (int i=0; i<intArray.length; i++) {
        System.out.println(intArray[i]);
    }

 - 배열의 초기화

// 1. 배열에 특정값 대입해서 선언
int[] intArr = {1,2,3,4,5};
String[] stringArr = {"a", "b", "c", "d"};

//2. for문을 통해서 대입
for(int i=0; i<intArr.length; i++) {
    System.out.println(intArr[i]);
}

//3. 향상된 for문
for (int item: intArr) {
    System.out.println(item);
}

//4. 배열의 주소를 모두 같은 값으로 초기화
Arrays.fill(intArr, 1);
for (int item: intArr) {
    System.out.println(item);
}

 

○ 복사

 - 만약 int[ ] =b = a 이렇게 한다면 값이아닌 주소만 복사되기 때문에 추후에 b의 값을 변경하면 a의 값도 변경됨

 → 얕은복사

- int [ ]b = a.clone() 이렇게 깊은복사를 할 수 있지만 2차원 이상의 배열이라면 얕은 복사로 작용할 수 있다. 

 

그래서 !

- int [ ] b = Arrays.copy0f(a, a.lenth); 이렇게 복사해야 한다. → 깊은복사

 

○ string 배열

String str = "ABCD";

// (1) lenth --길이 : 4
int strLenth = str.length();
System.out.println(strLenth);

//(2) charAt(int index) -- 1번째 요소 : "B" 
    char strChat = str.charAt(1);
    System.out.println(strChat);

//(3) substring -- 0 ~ 2까지 : "ABC"
    String strsub = str.substring(0,3);
    System.out.println(strsub);

//(4) equals(String str) -- 같은지 다른지 : true
    String newStr = "ABCD";
    boolean strEqual = newStr.equals(str);
    System.out.println(strEqual);

//(5) toCharArray() : String -> char[](캐릭터 배열)
    char[] strCharArray = str.toCharArray();

//(6) 반대로 char[] -> string
    char[] charArray = {'A', 'B', 'C'};
    String charArrayString = new String(charArray);
    System.out.println(charArrayString);

 

○ 다차원 배열

  - 2차원 배열

//2차원 배열의 선언방법(3가지)
int [][] array;
int array [][];
int[] array[];

//2차원 배열의 생성
int[][] array = new int[][];

 

 - 초기화 방법

// 중괄호를 사용해 초기화
int[][] array = {
	{1, 2, 3},
	{4, 5, 6}
};

// 반복문을 통한 초기화
int[][] array = new int[2][3]; // 최초 선언

for (int i = 0; i < array.length; i++) {
    for (int j = 0; j < array[i].length; j++) {
        arr[i][j] = 0;
    }
}

 

 - 가변 배열

// 선언 및 초기화
int[][] array = new int[3][];

 // 초기화 방법 1 : 배열 원소마다 각기 다른 크기로 지정
array[0] = new int[2];
array[1] = new int[4];
array[2] = new int[1];

// 방법2 : 중괄호로 초기화
int[][] array2 = {
    {10, 20},
    {10, 20, 30, 40},
    {10}

};

 

 

 - 활용 : 최대, 최솟값 구하기

// 최대값 구하기

int[] arr = { 3, 2, 1, 5, 1 };

// 최대값 초기값 세팅
int max = arr[0];

// 최대값 구하기
for (int num : arr) {
    if (num > max) { // 반복문 돌면서 나(max)보다 값이 작으면 저장
        max = num;
    }
}