[STUDY] 231205 | Java | 자료형, 연산자, 형변환, 조건문(if)

Nimgnos·2023년 12월 5일
0

👾 STUDY

목록 보기
12/40
post-thumbnail

💻 Java Data Type - 자바의 자료형

📌 1. Primitive Type - 기본 자료형(8개)

  • Boolean Type(논리형)
    • *boolean (참과 거짓 | 크기: 1바이트 | 표현 가능 범위 : true, false )
  • Integer Type(정수형)
    • byte (정수 | 크기: 1 | 표현 가능 범위 : -128~127)
    • short (정수 | 크기: 2 | 표현 가능 범위 : -32, 768~32, 767)
    • *int (정수 | 크기: 4)
    • long (정수 | 크기: 8 )
  • Floating Point Type(실수형)
    • float (실수 | 크기: 4)
    • *double (실수 | 크기: 8)
      • *정수 자료형 기본: int / 실수 자료형 기본: double
  • Character Type(문자형)
    • char (문자 | 크기: 2바이트 | 표현 가능 범위 : 유니코드 문자)
      • char 타입은 문자를 저장할 수 았다. 이 때 저장할 문자는 반드시 홀따옴표로 감싼다.

📌 2. Reference Type - 참조 자료형(무한대)

  • Class Type(클래스형)
  • Interface Type(인터페이스형)
  • Array Type(배열형)
  • Enum Type(열거형)
  • etc.

💻 연산자

  • +, - *, / : 산술연산자
  • % : 모드(mod)연산자. 나눗셈의 나머지를 구하는 연산
     int num1 = 10 % 3;
  • <, >, >=, <=, ==(같다), !=(같지 않다) * =기호는 우측에 위치
  • ! : 부정연산자. 결과값의 반대 결과를 나타냄
    System.out.println(!true);
           System.out.println(!(5 == 5));
  • && : and 연산자(그리고)
  • || : or 연산자(이거나)
    System.out.println(5 > 3 && 3 > 1);
          System.out.println(3 >= 2 || 10 > 11);
  • 예제
    public class 연산자_2 {
        public static void main(String[] args) {
            //대입연산자
            //=, +=, -=, *=, /=, %=
            int result1 = 0;
            //resolt1 = result1 + 1 -> 값을 1 증가
            result1 += 1;
            //num -= 3; num = num - 3;
            //a *= 5; -> a = a * 5;
            //증감연산자
            //증감연산자는 단독으로 사용할 때와
            //다른 코드와 함께 사용할 때 증감하는 시기가 달라진다.
            //단독 사용: 한 줄에 증감연산자만 사용한 경우 ★ num++;
            int num = 5;
            num++; //기존의 값에서 +1 / num = num + 1, num += 1;
            System.out.println(num);
            ++num; //num--, --num -> 기존의 값에서 -1
            System.out.println(num);
            int x1 = 5;
            int y1 = ++x1;
            System.out.println("y1 = " + y1);
            System.out.println("x1 = " + x1);
            int x2 = 5;
            int y2 = x2++;
            System.out.println("y2 = " + y2);
            System.out.println("x2 = " + x2);
            int z = 3;
            System.out.println(z++); //3(증감없음)
            System.out.println(z);
            // = -> 제일 마지막에 해석.
            //단, 후위 증감 연산자와 함게 쓰일 때는 주의 필요!
            //&&(그리고)가 우선순위가 높음.
        }
    }

📌 타입 변환 / 형 변환

  • 타입/형 변환: 정수 ➡ 실수, 실수 ➡ 정수
  1. 자동 형변환(promotion)
    int num1 = 10;
         double num2 = num1;
         System.out.println("num2 = " + num2);``` 
  2. 명시적 형변환(casting)
    double num3 = 10.9;
            int num4 = (int)num3; //명시적 형 변환 시 소수점 자리 수는 절삭함
            System.out.println("num4 = " + num4);

📌 조건문(if)

  • If문의 문법:
    if(참 또는 거짓을 판단할 수 있는 조건){
          조건이 참일 때 실행할 코드들
         }
  • 예제
    public class If_01 {
        public static void main(String[] args) {
            System.out.println("프로그램 시작");
            if(10 > 5){
                System.out.println("if문 실행");
            }
            System.out.println("프로그램 시작");
        }
    }
    public class If_02 {
        public static void main(String[] args) {
            //정수를 저장할 수 있는 num을 선언하고
            //해당 변수에 임의의 정수를 저장
            //변수에 저장된 값이 짝수일 때만
            //'참'이라는 글자를 출력하는 코드
            int num = 3;
            if(num % 2 == 0){
                System.out.println("참");
            }
            else {
                System.out.println("거짓");
            }

📌 조건문(if) - 예제 풀이

문제 1.

  • 정수를 담을 수 있는 변수 두 개를 선언하고, 각각의 변수에 임의의 정수를 초기화하여라. 그리고 두 수의 합이 50보다 클 경우에는 ‘두 수의 합이 50보다 큽니다.’를 출력하고, 두 수의 합이 50 이하일 경우에는 ‘두 수의 합이 50이하 입니다.’를 출력해보세요.
    • 풀이 및 결과
public class If_q1 {
    public static void main(String[] args) {
        int num1, num2;
        num1 = 50;
        num2 = 2;
        if((num1 + num2) > 50){
            System.out.println("두 수의 합이 50보다 큽니다.");
        }
        else {
            System.out.println("두 수의 합이 50 이하입니다.");
        }
    }
}

문제 2.

  • 정수형 변수 a, b를 선언하고 각각을 임의의 정수로 초기화하자. 그 후 a의 값이 크다면 ‘a가 큽니다.’를, b의 값이 크면 ‘b가 큽니다’를, 두 변수의 값이 같다면 ‘같습니다.’를 출력해보자.
    • 풀이 및 결과
    public static void main(String[] args) {
        int a, b;
        a = 1;
        b = 2;
        if(a > b){
            System.out.println("a가 큽니다.");
        }
        else if (a < b) {
            System.out.println("b가 큽니다.");
        }
        else {
            System.out.println("같습니다.");
        }
    }
}

문제 3.

  • 정수형 변수 하나를 선언하고 임의의 정수로 초기화하자. 그리고 변수의 값이 3의 배수이면 ‘3의 배수입니다’를 출력해보자.
    • 문제 및 풀이
    public static void main(String[] args) {  
        int num = 6;
        if(num % 3 == 0){
            System.out.println("3의 배수입니다.");
        }
    }
}

문제 4.

  • 정수형 변수 하나를 선언하고 0 ~ 100까지의(0,100 포함) 숫자 중 임의의 값으로 초기화하자. 그 후 변수의 값이 90보다 크고 100보다 작거나 같으면 ‘학점은 A입니다.’를 출력하고, 80보다 크고 90보다 작거나 같으면 ‘학점은 B입니다.’를 출력하고, 80점 이하라면 ‘학점은 C입니다.’를 출력해보자.
    • 풀이 및 결과
public class If_q5 {
    public static void main(String[] args) {
        int num = 50;
        if (num > 90 && num <= 100){
            System.out.println("학점은 A입니다.");
        } else if (num > 80 && num <= 90) {
            System.out.println("학점은 B입니다.");
        }
        else {
            System.out.println("학점은 C입니다.");
        }
    }
}

문제 5.

  • 정수형 변수 하나를 선언하고 임의의 숫자로 초기화하자. 그 후, 입력한 숫자가 5의 배수가 아닐 경우에만 ‘5의 배수를 입력하세요.’라고 출력되게 프로그램을 만드시오.
    • 풀이 및 결과
    public static void main(String[] args) {
        int num = 4;
        if(num % 5 != 0){
            System.out.println("5의 배수를 입력하세요.");
        }
    }
}

📌 Scanner(스캐너) - 입력받기 예제 풀이

public class 정수입력받기_2 {
    public static void main(String[] args) {
        //키보드로 두 정수를 입력받아
        //두 정수의 합을 출력
        Scanner sc = new Scanner(System.in);
        System.out.println("첫번째 수 : ");
        int num1 = sc.nextInt();
        System.out.println("두번째 수 : ");
        int num2 = sc.nextInt();
        System.out.println("입력받은 두 수의 합은 " + (num1 + num2));
    }
}

📌 If(Scanner 포함) - 예제 풀이

문제 1.

  • 세 정수를 선언하고 scanner로 값을 입력받는다. 그리고 세 수를 큰 순서대로 출력하여보라.(난이도 높음)
    -출력예시-
    첫번째 수 : 10
    두번째 수 : 30
    세 번째 수 : 20
    30 > 20 > 10
    • 풀이 및 결과
public class If_scanner_q6 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("첫번째 수 : ");
        int num1 = sc.nextInt();
        System.out.print("두번째 수 : ");
        int num2 = sc.nextInt();
        System.out.print("세번째 수 : ");
        int num3 = sc.nextInt();
        if (num1 > num2 && num2 > num3){
            System.out.println(num1 + " > " + num2 + " > " + num3);
        }
        else if (num1 > num3 && num3 > num2) {
            System.out.println(num1 + " > " + num3 + " > " + num2);
        }
        else if (num2 > num1 && num1 > num3) {
            System.out.println(num2 + " > " + num1 + " > " + num3);
        }
        else if (num2 > num3 && num3 > num1) {
            System.out.println(num2 + " > " + num3 + " > " + num1);
        }
        else if (num3 > num2 && num2 > num1) {
            System.out.println(num3 + " > " + num2 + " > " + num1);
        }
        else if (num3 > num1 && num1 > num2) {
            System.out.println(num3 + " > " + num1 + " > " + num2);
        }
    }
}
  • 선생님 풀이
    public static void main(String[] args) {
        //세 수를 키보드로 입력받아 큰 수부터 출력
        Scanner sc = new Scanner(System.in);
        //키보드로 입력받은 수를 저장할 변수
        int num1, num2, num3;
        //입력받은 세 수의 크기를 비교하여 저장할 변수
        int max, mid, min;
        System.out.print("첫번째 수 : ");
        num1 = sc.nextInt();
        System.out.print("두번째 수 : ");
        num2 = sc.nextInt();
        System.out.print("세번째 수 : ");
        num3 = sc.nextInt();
        //num1이 가장 큰 수일 때
        if(num1 > num2 && num1 > num3){
            max = num1;
            if(num2 > num3){
                mid = num2;
                min = num3;
            }
            else{
                mid = num3;
                min = num2;
            }
        }
        //num2이 가장 큰 수일 때
        else if(num2 > num1 && num2 > num3){
            max = num2;
            if(num1 > num3){
                mid = num1;
                min = num3;
            }
            else{
                mid = num3;
                min = num1;
            }
        }
        //num3이 가장 큰 수일 때 num1, num2
        else{
            max = num3;
            if (num1 > num2){
                mid = num1;
                min = num2;
            }
            else {
                mid = num1;
                min = num2;
            }
        }
        System.out.println(max + " > " + mid + " > " + min);
    }
}

문제 2.

  • Scanner를 이용하여 정수를 3개 입력받고, 이 세 개의 수로 삼각형을 만들 수 있는지를 판별하라. 삼각형이 가능하려면 두 변의 합이 다른 한 변의 합보다 반드시 커야 한다.
    • 풀이 및 결과
- public class If_심화_1 {
    public static void main(String[] args) {
        //1. 
        Scanner sc = new Scanner(System.in);
        int num1, num2, num3;
        System.out.println("세 개의 정수를 입력하시오.");
        System.out.print("첫번째 수 : ");
        num1 = sc.nextInt();
        System.out.print("두번째 수 : ");
        num2 = sc.nextInt();
        System.out.print("세번째 수 : ");
        num3 = sc.nextInt();
        if(num1 + num2 > num3 && num1 + num3 > num2 && num2 + num3 > num1){
            System.out.println("가능");
        }
        else {
            System.out.println("불가능");
        }
    }
}
  • 선생님 풀이
public class If_scanner_q6해설 {
    public static void main(String[] args) {
        //세 수를 키보드로 입력받아 큰 수부터 출력
        Scanner sc = new Scanner(System.in);
        //키보드로 입력받은 수를 저장할 변수
        int num1, num2, num3;
        //입력받은 세 수의 크기를 비교하여 저장할 변수
        int max, mid, min;
        System.out.print("첫번째 수 : ");
        num1 = sc.nextInt();
        System.out.print("두번째 수 : ");
        num2 = sc.nextInt();
        System.out.print("세번째 수 : ");
        num3 = sc.nextInt();
        //num1이 가장 큰 수일 때
        if(num1 > num2 && num1 > num3){
            max = num1;
            if(num2 > num3){
                mid = num2;
                min = num3;
            }
            else{
                mid = num3;
                min = num2;
            }
        }
        //num2이 가장 큰 수일 때
        else if(num2 > num1 && num2 > num3){
            max = num2;
            if(num1 > num3){
                mid = num1;
                min = num3;
            }
            else{
                mid = num3;
                min = num1;
            }
        }
        //num3이 가장 큰 수일 때 num1, num2
        else{
            max = num3;
            if (num1 > num2){
                mid = num1;
                min = num2;
            }
            else {
                mid = num1;
                min = num2;
            }
        }
        System.out.println(max + " > " + mid + " > " + min);
    }
}

문제 3.

  • 369 게임을 간단히 작성해보자. 1~99까지의 정수를 키보드로부터 입력받고 정수에 3, 6, 9 중 하나가 있는 경우는 "박수짝"을 출력하고 두 개 이상 있는 경우는 "박수짝짝"을 출력하는 프로그램을 작성하라. 예를들면, 키보드로 입력된 수가 13인 경우 "박수짝"을 36인 경우 "박수짝짝"을 출력하면 된다.
    • 풀이 및 결과
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("1~99까지의 정수를 입력하시오.");
        int cnt = 0; //박수의 개수를 저장
        int num = sc.nextInt();
        //입력받은 숫자를 일의자리, 십의자리 숫자로 분리
        int tens = num / 10; //일의자리
        int ones = num % 10; //십의자리
        if(tens == 3 || tens == 6 || tens == 9){
            cnt = cnt + 1;
        }
        if (ones == 3 || ones == 6 || ones == 9 ) {
            cnt = cnt + 1;
        }
        //박수 두번
        if(cnt == 1){
            System.out.println("박수짝");
        }
        else if(cnt == 2){
            System.out.println("박수짝짝");
        }
    }
 }

🍀 회고

  • 지난 주 선행학습 때 if는 너무 어려웠는데, 다시 복습도 하고 이해하지 못하고 넘어갔던 문제를 다시 풀어보면서 else까지 이해할 수 있었다.
  • 마지막 문제는 어려워서 다 이해하지 못했지만, 다양한 예제를 내 방식대로 풀어보고 선생님의 깔끔한 풀이와 어떤 차이가 있는지 비교해보면서 코드를 더 잘 이해할 수 있게 됐다.
profile
먹고 기도하고 코딩하라

0개의 댓글