Java 과제 [조건문]

TIL·2022년 12월 10일
0

Java (최은빈)

목록 보기
10/27

합격/불합격 출력

  • 사용자한테 국어 / 수학 / 영어 성적을 입력받아 평균이 70점 이상이면 합격 이라고 출력하시오.
  • 성적은 실수값으로 가정
  • 성적은 0이상 100점 이하가 올 수 있음
  • 만약 세 과목 중 하나라도 성적 유효범위에 해당하지 않으면 성적이 유효하지 않습니다 를 출력하시오.
package me.day04.practice;

import java.util.Scanner;

public class Practice01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 객체 : 데이터의 크기 커질수록 스택 아닌 힙에 저장(기초 자료형은 데이터의 크기 고정), 메모리 상의 필요 없는 객체는 JVM이 GC로 수거
        // Scanner 통해 콘솔(System)로 사용자 입력 받아 JVM에 데이터 전달

        System.out.print("국어 성적 입력하시오: "); // 사용자 입력 유도 메시지 (print)
        double kor = scanner.nextDouble();
        if (!(kor >= 0 && kor <= 100)) {
            System.out.println("입력하신 성적 " + kor + " 유효하지 않습니다.");
            return; // main 함수 종료
        }

        System.out.print("수학 성적 입력하시오: ");
        double math = scanner.nextDouble();
        if (!(math >= 0 && math <= 100)) {
            System.out.println("입력하신 성적 " + math + " 유효하지 않습니다.");
            return;
        }

        System.out.print("영어 성적 입력하시오: ");
        double eng = scanner.nextDouble();
        if (!(eng >= 0 && eng <= 100)) {
            System.out.println("입력하신 성적 " + eng + " 유효하지 않습니다.");
            return;
        }

        // ' <= <= ' 표현은 언제 쓸 수 있지??
//        if (!(0 <= kor <= 100 || 0 <= math <= 100 || 0 <= eng <= 100)) {
//            System.out.println("유효하지 않은 데이터 입니다.");
//        }

        // 동작은 하지만 각 분기마다 다른 에러 메시지 출력 불가
//        if (!(kor >= 0 && kor <= 100 || math >= 0 && math <= 100 || eng >= 0 && eng <= 100)) {
//            System.out.println("유효하지 않은 데이터 입니다.");
//            return;
//        }

        // 함수로 만들기

        double avg = (kor + math + eng) / 3;
        System.out.println("당신의 평균 점수는 " + avg + " 입니다.");
        if (avg >= 70) {
            System.out.println("합격");
        }

        scanner.close();
    }
}
  • 공통된 부분 함수로 만들기



소문자 -> 대문자

  • 사용자에게 입력받은 영문자가 소문자라면 대문자로 변경하는 프로그램을 작성하시오. (메서드 없이)
  • 만약 입력받은 문자가 영문자가 아니라면 영문자가 유효하지 않습니다 를 출력하시오.
package me.day04.practice;

import java.util.Scanner;

public class Practice02 {
    public static void main(String[] args) {
        // 데이터 입력 받기
        Scanner scanner = new Scanner(System.in);
        System.out.print("영문자 하나를 입력하시오: ");
        char ch = scanner.next().charAt(0);

        // 유효성 검증 (영문자)
        if (!((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))) { // 아스키코드표에서 대문자와 소문자는 연속해 있지 않음 (중간에 기호 존재)
            System.out.println("입력하신 문자 " + ch + " 는 영문자가 아닙니다.");
            return;
        }

//        char ch = scanner.next().toLowerCase().charAt(0); // 메서드 사용

        // 소문자 -> 대문자
        // 아스키코드 표에서 소문자는 대문자보다 뒤에 있음 -> 차이만큼 빼주면 된다.
        if ((ch >= 'a' && ch <= 'z')) { // 소문자라면
            ch -= ('a' - 'A'); // 차이만큼 빼준다. (32)
        }
        System.out.println("결과 문자는 " + ch + " 입니다.");

        scanner.close();
    }
}



계산기

  • 간단한 계산기
  • 사용자에게 두 정수 와 연산자 문자 를 입력받아 사칙연산 프로그램을 작성하시오.
  • 연산자 종류: +, -, *, /, %
  • 만약 입력받은 문자가 연산자가 아니라면 연산자가 유효하지 않습니다 를 출력하시오.
package me.day04.practice;

import java.util.Scanner;

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

        //// 입력 받기
        Scanner scanner = new Scanner(System.in);
        System.out.print("연산식을 입력하시오 : "); // 3 + 5

        // 1. int로 받기 (+ + + -> InputMismatchException)
//        int x = scanner.nextInt();
//        char op = scanner.next().charAt(0); // next() : 스페이스 앞까지 가져옴
//        int y = scanner.nextInt();

        // 2. 문자열로 받기 (무조건 스트링으로 받고 나중에 파싱하기) // split // String 학습 후 다시!
//        String x = scanner.next();
//        String op = scanner.next();
//        String y = scanner.next();

        // 3. 문자로 받기
        // 피연산자가 무조건 한자리수 (0 ~ 9)만 들어온다고 문제 바꿈
        char x = scanner.next().charAt(0);
        char op = scanner.next().charAt(0);
        char y = scanner.next().charAt(0);

        System.out.println("x = " + x);
        System.out.println("op = " + op);
        System.out.println("y = " + y);


        //// 유효성 검증
        if (!(x >= '0' && x <= '9')) {
            System.out.println(x + "가 한자리 피연산자가 아닙니다!");
            return;
        }

        if (!(op == '+' || op == '-' || op == '*' || op == '/' || op == '%')) {
            System.out.println(op + "가 유효하지 않은 연산자 입니다.");
            return;
        }

        if (!(y >= '0' && y <= '9')) {
            System.out.println(y + "가 한자리 피연산자가 아닙니다!");
            return;
        }


        //// char -> int (파싱)
        // - '0' 안해도 들어는감. 정확한 숫자 아닌 문자에 대한 아스키코드값이 들어감
        int xInt = x - '0';
        int yInt = y - '0';
        double res = 0;

        // '0' ~ '9' == 48 ~ 57 (아스키코드)
        // x = '9' -> 57 - 48 == 9
        // x = '8' -> 56 - 48 == 8
        // x = '3' -> 51 - 48 == 3

        //// 사칙연산
        if (op == '+') {
            res = xInt + yInt;
        } else if (op == '-') {
            res = xInt - yInt;
        } else if (op == '*') {
            res = xInt * yInt;
        } else if (op == '/') {
            res = xInt / (double) yInt; // 3/6 = 0.500000
        } else { // op == '%'
            res = xInt % yInt;
        }

        //// 출력
        System.out.printf("%d %c %d = %.2f\n", xInt, op, yInt, res); // %d: 숫자, %c: 문자, %f: 실수, .2: 소수점 둘째 자리까지 출력
        scanner.close();
    }
}



사분면 출력

  • 사분면 판단 프로그램
  • 사용자에게 사분면 위의 두 점 x, y를 입력받아 어떤 사분면에 속하는지 판단하는 프로그램을 작성하시오.
  • 사분면 위의 점은 실수값이라고 가정
  • 1 사분면 위에 있으면 1 사분면 출력
  • 2 사분면 위에 있으면 2 사분면 출력
  • 3 사분면 위에 있으면 3 사분면 출력
  • 4 사분면 위에 있으면 4 사분면 출력
  • 만약 어떤 사분면 위에 있지 않고 x 축 위에 있으면 x 축 위에 있음을 출력
  • 만약 어떤 사분면 위에 있지 않고 y 축 위에 있으면 y 축 위에 있음을 출력
  • 원점이면 원점을 출력
package me.day04.practice;

import java.util.Scanner;

public class Practice04 {
    public static void main(String[] args) {
        //// String 으로 입력 받기
        System.out.print("(x, y) : ");
        Scanner scanner = new Scanner(System.in);
        String point = scanner.nextLine(); // (1, 2) // nextLine() : 엔터 전까지 받기(String)

        //// 데이터 처리
        point = point.replace("(", ""); // 양쪽 괄호 없애기
        point = point.replace(")", "");
        String[] strings = point.split(","); // , 기준으로 문자열 자르기

        // "1 2" 를 실수로 파싱
        double x = Double.parseDouble(strings[0]);
        double y = Double.parseDouble(strings[1]);

        //// 출력
        // 조건마다 확률이 있다면 true 일 확률이 높은 조건식부터 쓰는 것이 실행속도 빠름
        if (x == 0 && y == 0) {
            System.out.println("at center"); // 만약 (0, 0) 받았다면 여기서 if 블록 나감
        } else if (x == 0) {
            System.out.println("on y-axis");
        } else if (y == 0) {
            System.out.println("on x-axis"); // 한점이 0인 특수한 케이스 먼저 제거해주는게 좋음
        } else if (x > 0 && y > 0) {
            System.out.println("at 1 quadrant");
        } else if (x < 0 && y > 0) {
            System.out.println("at 2 quadrant");
        } else if (x < 0 && y < 0) {
            System.out.println("at 3 quadrant");
        } else {
            System.out.println("at 4 quadrant");
        }

        scanner.close();
    }
}



윤년

  • 윤년을 고려하여 윤년인 경우 2월달이 29일로 나오도록
  • 윤년의 조건 🗓 (둘 중에서 하나만 만족하면 됨)
    1. 4의 배수이어야하고 100의 배수가 아니어야 함
    2. 400의 배수는 무조건 윤년이 됨
package me.day04.practice;

public class Practice05 {
    public static void main(String[] args) {
        int year = 2020;
        int month = 2;
        int totalDays = 0;

        switch(month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                totalDays = 31;
                break;

            case 4:
            case 6:
            case 9:
            case 11:
                totalDays = 30;
                break;

            // 윤년은 2월이 28일 아닌 29일이다.
            case 2:
                totalDays = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) ? 29 : 28;
                break;
        }

        System.out.printf("%d년 %d월의 총 일수는 %d일 입니다\n", year, month, totalDays);
    }
}

0개의 댓글

관련 채용 정보