HAZEL

[ CH01. 기초자바 ] 연산자, 부호 연산자, 산술연산자, if 문, while 문, do - while 문, for문 본문

PROGRAMMING/Java

[ CH01. 기초자바 ] 연산자, 부호 연산자, 산술연산자, if 문, while 문, do - while 문, for문

Rmsid01 2021. 3. 27. 19:57

CH01. 기초 자바

: 패스트 캠퍼스 강의를 공부하고 정리한 내용입니다.

 

 

01. 자바 연산자 


1. 항과 연산자

- 항 ( operand ) : 연산에 사용하는 값

- 연산자 ( operator ) : 항을 이용하여 연산하는 기호 

 

2. 대입 연산자 ( assignment operator )

 - 변수에 다른 변수나 값을 대입하는 연산자

 - 이항 연산자 중 우선 순위가 가장 낮은 연산자들

 

3. 부호 연산자

: 단항 연산자, 변수의 부호를 유지하거나 바꿈 , 실제 변수의 부호가 변하려면 대입 연산자를 사용해야함 

 

4. 산술 연산자

 - 사칙 연산자 : +, - , *, / ( 나누어 몫을 구함 ) , % ( 나누어 나머지를 구함 ) 

 

5. 복합 대입 연산자 

: += , -= , *=, /=, %=

 

- 비트 연산자

 a. <<= : 비트를 왼쪽으로 이동하고 그 값을 왼쪽 항에 대입

 b. >>= : 비트를 오른쪽으로 이동하고 그 값을 왼쪽항에 대입

 c. >>>= : 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입

 d. &=   : 두 항의 & 비트 연산 후 그 값을 왼쪽 항에 대입

 e.  |=  : 두 항의 | 비트 연산 후 , 그 값을 왼쪽 항에 대입

 f.  ^= : 두 항의 ^ 비트 연산 후, 그 값을 왼쪽 항에 대입 

 

6. 증가, 감소 연산자

: 단항 연산자, 

: ++, --

 

7. 관계 연산자

: 이항 연산자

: 연산의 결과가 참, 거짓으로 반환되며 비교 연산자라고도 함.  

 

package ch12;

public class RealtionalTest {
    public static void main(String[] args) {

        int num1 = 5;
        int num2 = 3;

        boolean value = (num1 > num2);
        System.out.println(value);

        System.out.println(num1 < num2);
        System.out.println(num1 >= num2);
        System.out.println(num1 <= num2);
        System.out.println(num1 == num2);
        System.out.println(num1 != num2);
    }
}

 

8. 논리 연산자

: 관계 연산자와 같이 많이 사용되며, 결과가 참 / 거짓으로 반환 됨 

a. && ( 논리곱  ) : 두 항이 모두 참인 경우에만 결과값이 참 - 그렇지 않은 경우는 거짓  

b. || ( 논리합 ) : 두 항 중 하나의 항만 참이면 결과 값은 참 - 두항이 모두 거짓이면 결과 값은 거짓

c.  ! ( 부정 ) : 단항 연산자. 참인 경우는 거짓으로 바꾸고, 거짓인경우는 참으로 바꿈 

 

package ch12;

public class LogicalTest {
    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 20;

        boolean flag = (num1 > 0) &&  (num2 > 0);
        System.out.println(flag);

        flag = (num1 < 0 ) && (num2 > 0);
        System.out.println(flag);

        flag = (num1 > 0) || (num2 >0);
        System.out.println(flag);

        flag = (num1 < 0 ) || (num2 > 0 );
        System.out.println(flag);

        flag = !(num1 > 0);
        System.out.println(flag);
        
    }
}

 

* 단락 회로 평가 ( short circuit evaluation ) : 논리 연산에서 모든 항이 실행되지 않는 경우 

- 논리 곱  (&&) 은 두 항의 결과가 모두 true 일 때, 결과가 true -> 앞의 항의 결과가 false 이면, 뒤의 항을 평가하지 않음

- 논리 합 ( || ) 은 두 항의 결과가 모두 false 일 때만 결과가 false -> 앞의 항의 결과가 true 이면, 뒤의 항의 결과를 평가하지 않음 

 

package ch12;

public class ShortCircuit {

    public static void main(String[] args) {

        int num1 = 10 ;
        int i = 2;

        boolean value = ((num1 = num1 + 10) < 10 ) && ( ( i = i + 2 ) < 10);
        System.out.println(value);  // false
        System.out.println(num1);  //20
        System.out.println(i);  //2

        value = ((num1 = num1 + 10 ) < 10) || ( ( i = i +2 ) < 10 );
        System.out.println(value);   //true
        System.out.println(num1);   //30
        System.out.println(i);      // 4
    }
}

 

9. 조건 연산자

: 삼항 연산자, 조건식의 결과가 참/ 거짓인 경우에 따라 다른 결과가 수행됨 

: if (조건문) 을 간단히 표현할 때 사용할 수 있음 

: 사용 방법 ->  조건식 ? 결과1 : 결과 2 ; 

 -  조건식이 참이면 결과1을 반환하고, 거짓이면 결과2를 반환하게 된다. 

 

 

10. 비트 연산자

: 대입연산자와 다른 연산자가 함께 사용됨.

: 마스크 - 특정 비트를 가리고 몇 개의 비트 값만 사용할때 

: 비트 켜기 - 특정 비트들만을 1로 설정해서 사용하고 싶을 때 

: 비트 끄기 - 특정 비트들만을 0으로 설정해서 사용하고 싶을 때

: 비트 토글 - 모든 비트들을 0은 1로, 1은 0으로 바꾸고 싶을 때 

 

* 비트 연산자의 종류

a. ~ : 비트의 반전 ( 1의 보수 ) 

b. & : 비트 단위 AND

c. | : 비트단위 OR

d. ^ : 비트 단위 XOR  , 두개의 비트가 서로 다른경우에 1을 반환

e. << : 왼쪽 shift 

f.  >> : 오른쪽 shift

g.  >>>  : 오른쪽 shift

 

02. 조건문 - if 문 ( 만약에 ... 라면 )


1.  조건문 개념

package ch14;

import java.util.Scanner;

public class IfElseTest {
    public static void main(String[] args) {

        int age = 7;

//        Scanner scanner = new Scanner(System.in);
//        int age = scanner.nextInt();

        if (age >= 8) {
            System.out.println("학교에 다닙니다.");
        }
        else {
            System.out.println("학교에 다니지 않습니다.");
        }
    }
}

 

2. 조건이 여러 개 일때의 if문

: 하나의 상황에 대한 조건이 여러개로 나뉘고 각 조건에 다른 수행이 이루어져야 할 경우 사용 

: 파이썬의 elif 는 자의 else if 인가 보다.

 

1) IF - ELSE 문 

package ch15;

public class IfElseIfElseTest {
    public static void main(String[] args) {

        int age = 12;
        int charge ;

        if (age < 8) {
            charge = 1000;
            System.out.println("미 취학 아동입니다.");
        }
        else if(age < 14){
            charge = 2000;
            System.out.println("초등학생입니다.");
        }
        else if(age < 20){
            charge = 2500;
            System.out.println("중, 고등학생입니다.");
        }
        else{
            charge = 3000;
            System.out.println("일반인입니다.");
        }
        System.out.println("입장료는 " + charge + "원입니다.");
    }
}

// 초등학생입니다.
// 입장료는 2000원입니다.

 

2) IF - IF 문 

: if else 문의 경우, 해당 조건을 만족하면 아래로 내려가지 않음에 비해, if if 문은 조건이 일치하더라고 아래로 내려간다. 

package ch15;

public class IfIfTest {
    public static void main(String[] args) {

        int age = 12;
        int charge ;

        if (age < 8) {
            charge = 1000;
            System.out.println("미 취학 아동입니다.");
        }
        if(age < 14){
            charge = 2000;
            System.out.println("초등학생입니다.");
        }
        if(age < 20){
            charge = 2500;
            System.out.println("중, 고등학생입니다.");
        }
        else{
            charge = 3000;
            System.out.println("일반인입니다.");
        }
        System.out.println("입장료는 " + charge + "원입니다.");
    }
}

// 초등학생입니다.
// 중, 고등학생입니다.
// 입장료는 2500원입니다.

 

3. switch - case 문 

: if - else , if - else 문을 사용할 때, 복잡한 부분을 가독성 좋게 구현하기 위해서 사용.

: 비교조건이 특정 값이나 문자열인 경우 사용 

: 멈출때는 break 문을 사용하는데, 자바 14부터는 사용하지 않는다고 함.

// 한달이 며칠인지 알려주는 프로그램
package ch16;

public class SwitchCaseTest {
    public static void main(String[] args) {

        int month = 10 ;
        int day;

        switch(month) {

            case  1 : case 3 : case 5: case 7 : case 8: case 10 : case 12:
                day = 31;
                break;
            case 4: case 6: case 9: case 11:
                day = 20;
                break;
            case 2:
                day =28;
                break;
            default:
                day = 0;
                System.out.println("존재하지 않는 달 입니다.");
        }
        System.out.println(month + "월은 "  + day + "일입니다.");
    }
}

 

 

03. 반복문 

1. while 문  - 조건이 참인 동안에 반복 수행

무한 반복하고 싶을 땐, while(true) 로 쓰면 된다. 

package ch17;

public class WhileTest {
    public static void main(String[] args) {

        int num = 1 ;
        int sum = 0;

        while ( num <= 10 ){

            sum += num;
            num++;
        }
        System.out.println(sum);
        System.out.println(num);
    }
}

 

 

2. Do-While 문 

: while문은 조건을 먼저 체크하고 반복 수행한다면, do - while 은 조건과 상관 없이 수행을 한번 하고나서 조건을 체크 

: 조건과 맞지않으면 수행을 하지 않음. 

 

package ch18;

import java.util.Scanner;

public class DowhileTest {
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        int input;
        int sum = 0 ;
        
        do {
            input = scanner.nextInt();
            sum += input;
        }while(input != 0);

        System.out.println(sum);
    }
}

 

3. for 문 

 

for ( 초기화식 ; 조건식 ; 증감식 )

{

   수행문 ;

    ...

}

package ch19;

public class ForTest {
    public static void main(String[] args) {

        int count = 1;
        int sum = 0;

        for (int i = 0; i < 10; i++, count++) { // 10 번을 반복한다는 의미
             // for ( int i = 0 , count = 1 ; i < 10 , i++ , count++ ) 도 가능하다
       
            sum += count;
            //count++
        }
        System.out.println(sum);

        int num = 1;
        int total = 0;

        while (num <= 10) {
            total += num;
            num++;

        }
        System.out.println(total);
    }
}

 

* if 문의 문장은 생략이 가능하다 ! 

 a. 초기화식 생략 : 이전에 값이 초기화 되어 for 내부에서 값을 지정할 필요가 없는 경우 

for (  ; 조건식 ; 증감식 )

{

   수행문 ;

    ...

}

b. 조건식 생략 : 반복 수행에 대한 조건이 수행문 내부에 있는 경우

for ( 초기화식 ;  ; 증감식 )

{

  sum += i ;

 if (sum > 200) break ;

 

 

c. 증감식 생략 : 증감식에 대한 연산이 복잡하거나 다른 변수의 연산 결과값에 결정되는 경우

for ( 초기화식 ; 조건식 ;  )

{

    ...

    i = ( ++ i ) % 10 ;

}

d. 무한 반복 - 다 생략됨

 

4. 중첩 반복문 

: 이중 for문 혹은 이중 while문을 의미함

 

5. break문  , continue 문 

1) break문

: 감싸고 있는 제어문을 빠져나오기 위한 기능 

: 여러 반복문이 중첩되어있는 경우엔 break문이 포함되어있는 반복문만 빠져나옴

 

package ch21;

public class BreakTest {
    public static void main(String[] args) {

        int sum = 0;
        int num;

        for (num  =  1 ; ; num++ ){
            sum += num;
            if ( sum >= 100 ) break;
        }
        System.out.println(sum);
        System.out.println(num);
    }
}

 

2) continue 문 

: 반복문 내에서 조건문과 같이 사용하여, 조건이 맞는 경우 이후 반목문 블럭 내부의 다른 수행문들을 수행하지 않음

 

// 1 부터 100까지 숫자 중에 3의 배수를 출력하세요
package ch21;

public class ContinueTest {
    public static void main(String[] args) {
        int num ;
        for (num = 1; num <= 100 ; num++){
            if ( ( num % 3) != 0) continue;
            // continue 를 사용하면 아래를 무시하고, 위로 올라가라는 의미이다.

            System.out.println(num);
        }
    }
}