본문 바로가기

3월 ~ 5월) 자바/java

16Day - (랜덤) RandomApp / NewPasswordApp / BaseballGameApp / DateApp & SimpleDateFormatApp(간단하게) / DecimalFormatApp / CalendarApp / CurrentCalendarApp

 RandomApp

package xyz.itwill.util;
// java.util 패키지 : 프로그램 작성에 유용한 기능을 제공하는 클래스 (인터페이스)가 선언된 패키지

// Scanner 클래스 : 입력장치로부터 값을 입력받기 위한 긴응의 메소드를 제공하기 위한 클래스
// Arrays 클래스 : 배열 요소를 처리하기 위한 기능의 메소드를 제공하기 위한 클래스

import java.util.Random;

// Random 클래스 : 난수값 관련 기능의 메소드를 제공하기 위한 클래스
public class RandomApp {
    public static void main(String[] args) {
        Random random = new Random();

        // Random.nextInt(int bound) : 0 ~ bound-1 범위의 정수 난수값을 반환하는 메소드
        for (int i = 1; i <= 5; i++) {
            System.out.println(i + "번째 난수값 >> " + random.nextInt(100)); // 0 ~ 99
        }
    }
}

// 실행할때마다 값이 다름
1번째 난수값 >> 5
2번째 난수값 >> 71
3번째 난수값 >> 34
4번째 난수값 >> 82
5번째 난수값 >> 66

 

 


package xyz.itwill.util;

NewPasswordApp

import java.util.Random;
import java.util.UUID;

// 새로운 비밀번호를 생성하여 제공하는 프로그램 작성
public class NewPasswordApp {
    // 새로운 비밀번호를 생성하여 반환하는 메소드 - Random 클래스 이용
    public static String newPasswordOne() {
        Random random = new Random();

        // 비밀번호로 사용될 문자들이 저장된 문자열 생성
        String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^&*";

        StringBuffer password = new StringBuffer();
        for (int i = 1; i <= 10; i ++) {
            password.append(str.charAt(random.nextInt(str.length())));
        }

        return  password.toString();
    }


    // 새로운 비밀번호를 생성하여 반환하는 메소드 - UUID 클래스 이용
    public static String newPasswordTwo() {
        // UUID 클래스 : 범용적으로 사용되는 식별자(고유값)를 생성하기 위한 기능을 메소드로 제공하는 클래스

        // UUID.randomUUID() : 식별자를 생성하여 식별자가 저장된 UUID객체를 반환하는 메소드
        // > UUID 객체에 저장된 식별자는 숫자와 영문자(소문자), 4개의 - 문자로 구성된 36개의 문자가 저장된 문자열

        // UUID.toStiring() : UUID 객체에 저장된 식별자를 문자열(String 객체)로 변환하여 반환하는 클래스
        return UUID.randomUUID().toString().replace("-", "").substring(0, 10).toUpperCase();
    } // 대문자로 반환

    public static void main(String[] args) {
        System.out.println("새로운 비밀번호 -1 = " + newPasswordOne());
        System.out.println("새로운 비밀번호 -2 = " + newPasswordTwo());

    }
}


새로운 비밀번호 -1 = HU%ZQ5A$5D
새로운 비밀번호 -2 = 3C000FF36B

 


BaseballGameApp

package xyz.itwill.util;
// 숫자야구게임 : 0 ~ 9 범위의 정수 난수값을 3개 제공받아 키보드로 입력하여 맞추는 게임
// > 난수값과 키보드 입력값은 0~9 범위의 3개의 정수값으로 서로 다르며 0으로 시작 불가능
// > 키보드 입력값이 형식에 맞지 않은 겨웅 재입력되도록 작성
// > 난수값과 입력값을 비쇼하여 동일한 정수값이 존재하는 경우 위치가 같으면 스트라이크 처리하고 위치가 다르면 볼로 처리하여 계산
// > 스트라이크가 3대면 성공 메세지 출력후 프로그램 종료하고 아니면 스트라이크와 볼의 갯수 출력
// > 키보드로 정수값을 입력할 수 있는 기회는 15번을 제공하며 기회를 모두 소진한 경우 난수값 출력
public class BaseballGameApp {
    public static void main(String[] args) {
        Random random = new Random();

        // 0 ~ 9범위의 정수값 3개를 저장하기 위한 배열 선언 - 난수값을 저장하기 위한 배열
        int[] dap = new int[3];

        // 규칙에 맞는 난수값을 배열 요소에 저장되도록 처리하기 위한 반복문
        while (true) { // 규칙  > 난수값과 키보드 입력값은 0~9 범위의 3개의 정수값으로 서로 다르며 0으로 시작 불가능
            for (int i = 0; i < dap.length; i++) {
                dap[i] = random.nextInt(10); // 0~9 범위의 난수를 배열 요소에 저장
            }

            if (dap[0]!=0 && dap[0]!= dap[1] && dap[1]!=dap[2] && dap[2] != dap[0])
                break;
        }
        Scanner scanner = new Scanner(System.in);
        // 키보드로 정수값을 입력받아 비교 처리하는 기회를 제공하기 위한 반복문

        // 0 ~ 9 범위의 정수값 3개를 저장하기 위한 배열 선언 - 입력값을 저장하기 위한 배열
        int[] num = new int[3];

        //정답 관련 상태정보를 저장하기 위한 변수 선언
        // > false : 정답을 못맞춘 상태, true : 정답을 맞춘 상태
        boolean result=false;

        // 키보드로 정수값을 입력받아 비교 처리하는 기회를 제공하기 위한 반복문
        for (int cnt = 1; cnt <= 15; cnt++) {

            // 스트라이크와 볼의 갯수를 저장하기 위한 변수 선언
            int strike = 0;
            int ball = 0;

            // 규칙에 맞는 키보드 입력값을 배열 요소에 저장되도록 처리하기 위한 반복문
            loop:
            while (true) {
                System.out.print(cnt + "번째 입력 >> ");
                String input = scanner.nextLine(); // 키보드로 입력받음

                if (input.length()!=3) { // 비정상적인 값이 입력된 경우
                    System.out.println("[에러] 3자리의 숫자만 입력 가능합니다.");
                    continue;
                }
                // 입력받은 문자열에 문자를 차례대로 추출하여 배열 요소에 저장
                for (int i = 0; i < num.length; i++) {
                    // 문자코드 : '0' = 48 / '9' = 57 라는 코드값을 가지고있음
                    // ex) '4' - '0' >> 52 - 48 = 4
                    num[i] = input.charAt(i) - '0'; // 문자값이 정수값으로 됨

                    if (num[i] < 0 || num[i] > 9 ) { // 비정상적인 값이 입력된 경우
                        System.out.println("[에러] 3자리의 숫자만 입력 가능합니다.");
                        continue loop; // loop 입력함으로써 다시 입력
                    }
                }
                if (num[0]!=0 && num[0]!= num[1] && num[1]!=num[2] && num[2] != num[0])
                    break;
                System.out.println("[에러] 0으로 시작되거나 중복된 숫자가 존재합니다.");
            }

            // 난수값과 입력값을 비교하여 스트라이크와 볼을 구분하여 계산
            // > 난수값이 저장된 배열의 요소값과 입력값이 저장된 배열의 요소값을 교차 비교
            for (int i = 0; i < dap.length; i++) { // 난수값이 저장된 배열 요소를 처리하기위한 반복문
                for (int j = 0; j < num.length; j++) { // 입력값이 저장된 배열 요소를 처리하기 위한 반복문
                    if (dap[i] == num[j]) { // 요소값이 같은 경우
                        if (i == j) { // 요소값이 저장된 위치(Index)가 같은 경우
                            strike++;
                        } else {
                            ball++; // 볼 증가
                        }
                    }
                }
            }
            // 처리 결과 출력
            if (strike == 3) {
                System.out.println("[메세지] 축하합니다." + cnt + "번만에 맞췄습니다.");
                break;
            } // else 안적어도됨. 어차피 맞지않다면 ▽로 실행되서
                System.out.println("[결과] "+ strike + "스트라이크 " + ball + "볼");
        }

        if (!result) { // 정답을 맞추지 못한 경우
            System.out.print("[메세지] 정답을 못맞췄군요. 정답은 [");
            for (int su : dap) {
                System.out.print(su);
            }
            System.out.println("]입니다.");
        }
        scanner.close();
    }
}

1번째 입력 >> 345
[결과] 1스트라이크 0볼
2번째 입력 >> 123
[결과] 0스트라이크 3볼
3번째 입력 >> 567
[결과] 0스트라이크 0볼
4번째 입력 >> 789
[결과] 0스트라이크 0볼
5번째 입력 >> 809
[결과] 0스트라이크 0볼
6번째 입력 >> 425
[결과] 0스트라이크 1볼
7번째 입력 >> 364
[결과] 1스트라이크 0볼
8번째 입력 >> 687
[결과] 0스트라이크 0볼
9번째 입력 >> 799
[에러] 0으로 시작되거나 중복된 숫자가 존재합니다.
9번째 입력 >> 132
[결과] 1스트라이크 2볼
10번째 입력 >> 154
[결과] 0스트라이크 1볼
11번째 입력 >> 352
[결과] 2스트라이크 0볼
12번째 입력 >> 856
[결과] 0스트라이크 0볼
13번째 입력 >> 588
[에러] 0으로 시작되거나 중복된 숫자가 존재합니다.
13번째 입력 >> 697
[결과] 0스트라이크 0볼
14번째 입력 >> 927
[결과] 0스트라이크 1볼
15번째 입력 >> 856
[결과] 0스트라이크 0볼
[메세지] 정답을 못맞췄군요. 정답은 [312]입니다.

 


DateApp

package xyz.itwill.util;
import java.util.Date;

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

        // Date 클래스의 기본 생성자를 사용하여 객체를 생성하면 시스템의 현재 날짜와 시간이 저장된 Date 객체 생성
        Date now = new Date();

        // Date.toString() : Date 객체에 저장된 날짜와 시간을 문자열로 변환하여 반환하는 메소드
        System.out.println("now.toString() = " + now.toString());
        System.out.println("now = " + now); // 참조변수를 출력할경우 toString() 메소드 자동 호출

        String[] day = {"일", "월", "화", "수", "목", "금", "토"};

        // Date.getYear() : Date 객체에 저장된 날짜와 시간에서 [년]를 반환하는 메소드
        // > 1900년 부터 1씩 증가된 정수값 반환
        // Date.getMonth() : Date 객체에 저장된 날짜와 시간에서 [월]을 반환하는 메소드
        // > 0(1월) ~ 11(12월) 범위의 정수값 반환
        // Date.getDate() : Date객체에 저장된 날짜와 시간에서 [일]를 반환하는 메소드
        // Date.getDay() : Date객체에 저장된 날짜와 시간에서 [요일]를 반환 하는 메소드
        // > 0(일요일) ~ 6 (토요일) 범위의 정수값 반환

        String printDate = (now.getYear() + 1900 ) + "년 " + (now.getMonth()+1) + "월 "
                + now.getDate()+ "일 " + now.getDay() + "요일"; // 빗금&디플리먼트됨 (권장하지않아서)

        System.out.println("현재 날짜 = " + printDate);

        // Date.getTime() : Date객체에 저장된 날짜와 시간에서 대한 타임스템프를 반환하는 메소드
        // 타임스템프(TimeStamp) : 1970년 1월 1일을 기준으로 1ms마다 1씩 증가된 정수값
        // > 날짜와 시간을 정수값(long)으로 표현하여 연산 처리하기 위해 사용
        // long currentTime = now.getTime();
        long currentTime = System.currentTimeMillis();

        // 2000년 1월 1일 0시 0분 0초 가 저장된 Date 객체 생성
        Date wantDate = new Date(100, 0, 1);
        System.out.println("wantDate = " + wantDate);

        long wantTime = wantDate.getTime();

        System.out.println("연산결과(일) = " + (currentTime - wantTime) / (1000*86400));
    }
}

now.toString() = Wed Apr 19 15:23:11 KST 2023
now = Wed Apr 19 15:23:11 KST 2023
현재 날짜 = 2023년 4월 19일 3요일
wantDate = Sat Jan 01 00:00:00 KST 2000
연산결과(일) = 8509

 


SimpleDateFormatApp (간단하게)

package xyz.itwill.util;
// Java.text 패키지 : 값을 변환하는 기능을 메소드로 제공하기 위한 클래스(인터페이스)가 선언된 패키지

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

// SimpleDateFormat 클래스 : Date객체와 String 객체를 서로 반대로 변환하기 위한 기능을 메소드로 제공하기 위한 클래스
public class SimpleDateFormatApp {
    public static void main(String[] args) {
        Date now = new Date();

        // SimpleDateFormat 클래스로 객체를 생성하기 위한 매개변수에 날짜와 시간에 대한
        // 패턴정보를 문자열 전달받아 객체로 생성하는 생성자를 사용

        // > 패턴정보 : 패턴문자(날짜와 시간을 임의의 문자로 표현)를 사용하여 표현된 문자열
        // > 패턴문자 : y년, M월, d일, E요일, AM or PM(오전 또는 오후),
        // h(시:12시간), H(시:24시간), m분, s초
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy년 MM월 dd일 E요일");

        // SimplateFormat.format(Date date) : Date객체에 저장된 날짜와 시간을 SimpleDateFormat
        // 객체에 저장된 패턴정보를 사용하여 문자열 (String 객체)로 변환하는 반환 메소드
        String printDate = dateFormat.format(now);

        System.out.println("현재 날짜 = " + printDate);

        // SimpleDateFormath.applyPattern (String pattern) : SimpleDateFormat 객체에 저장된
        // 패턴 정보를 변셩하는 메소드
        dateFormat.applyPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println("현재 = " + dateFormat.format(now));


        // String 객체를 date로 바꿔주는 객체
        String want = "2000-01-01 00:00:00"; // 패턴대로 입력해야함

        try {
            // SimpleDateFormat.parse(String str) : SimpleDateFormat 객체에 저장된 패턴정보와 동일한 문자열을
            // 전달받아 원하는 날짜와 시간이 저장된 Date 객체를 생성하여 반환하는 메소드 - ParseException 발생 가능
            // > SimpleDateFormat 객체에 저장된 패턴정보와 일치하지 않는 문자열이 전달된 경우 ParseException 발생 가능 - 예외 처리

            Date wantDate = dateFormat.parse(want);
            System.out.println("wantDate = " + wantDate);
        } catch (ParseException e) {
            System.out.println("[에러] 형식에 맞게 날짜와 시간을 입력해 주세요.");
        }
    }
}

현재 날짜 = 2023년 04월 19일 수요일
현재 = 2023-04-19 16:09:17
wantDate = Sat Jan 01 00:00:00 KST 2000

 


DecimalFormatApp

package xyz.itwill.util;
import java.text.DecimalFormat;

// DeciamlFormat 클래스 : Number 객체(숫자값)와 String 객체를 서로 반대로 변환하기 위한
// 기능을 메소드로 제공하기 위한 클래스
public class DeciamlFormatApp {
    public static void main(String[] args) {
        int money = 100_000_000;
        System.out.println("금액 = " + money + "원");

        // DeciamlFormat 클래스로 객체를 생성하기 위한 매개변수에 숫자값에 대한 패턴정보를
        // 문자열로 전달받아 객체로 생성하는 생성자를 사용
        // > 패턴문자 : #(숫자 - 공백) 0(숫자 - 0) 콤마(,) 소숫점(.) 달러($)
        DecimalFormat deciamlFormat = new DecimalFormat("###,###,##0");

        // DecimalFormat.format(long number) : 숫자값을 전달받아 DecimalFormat 객체에 저장된
        // 패턴 정보를 사용하여 문자열로 변환하여 반환하는 메소드
        System.out.println(String.format("금액 = " + deciamlFormat.format(money) + "원"));

        // DecimalFormat.getInstance() : 기본 패턴정보가 저장된 DecimalFormat 객체를 반환하는 메소드
        // > 3자리마다 , 를 사용하여 숫자값을 표현하는 패턴정보
        System.out.println(String.format("금액 = " + DecimalFormat.getInstance().format(money) + "원"));

        // DecimalFormat.getCurrencyInstance() : 패턴정보가 저장된 DecimalFormat 객체를 반환하는 메소드
        // > 맨앞에 시스템이 사용하는 화폐단위를 붙이고 3자리마다 ,를 사용하여 숫자값을 표현
        System.out.println(String.format("금액 = " + DecimalFormat.getCurrencyInstance().format(money)));
    }
}

금액 = 100000000원
금액 = 100,000,000원
금액 = 100,000,000원
금액 = ₩100,000,000

 


CalendarApp

import java.util.Calendar;

public class CalendarApp {
    // Calender 클래스 : 날짜와 시간을 저장하고 저장된 날짜와 시간 관련 기능을 메소드로 제공하기 위한
    public static void main(String[] args) {
        // Calendar.getInstance() : 시스템의 현재 날짜와 시간이 저장된 Calendar 객체를 생성하여 반환하는 메소드

        Calendar calendar = Calendar.getInstance();

        // Calendar.toString() : Calendar 객체에 저장된 날짜와 시간을 문자열로 변환하여 반환하는 메소드
        // System.out.println("calender.toString() = " + calendar.toString());
        System.out.println("carendar = " + calendar);

        String[] day={"일","월","화","수","목","금","토"};

        // Calendar.get(int field) : Calendar 객체에 저장된 날짜와 시간에서 매개변수로
        // 전달받은 Calendar 클래스의 상수 (Constant)에 대한 값을 반환하는 메소드
        // > [월] 은 0(1월)~ 11(12월) 범위의 정수값으로 표현되며 [요일]은 1(일)~ 7(토) 범위의 정수
        String printDate = calendar.get(Calendar.YEAR) + "년 "
                + (calendar.get(Calendar.MONTH)+1) + "월 "
                + calendar.get(Calendar.DATE) + "일 "
                + day[calendar.get(Calendar.DAY_OF_WEEK)-1] + "요일"; // Calendar. 년도가 필요해요

        System.out.println("현재 날짜 = " + printDate);

    }
}

현재 날짜 = 2023년 4월 19일 수요일

CurrentCalendarApp

package xyz.itwill.util;
import java.util.Calendar;

// 현재 년월에 대한 달력을 출력하는 프로그램 작성
public class CurrentCalendarApp {
    public static void main(String[] args) {
        // 시스템의 현재 날짜와 시간이 저장된 Calendar 객체를 반환받아 저장
        Calendar calendar = Calendar.getInstance();

        // Calendar 객체에 날짜와 시간 중 [일]을 [1일]로 변경
        // Calendar.set(int field, int value) : Calendar 객체에 저장된 날짜와 시간을 매개변수로
        // 전달받은 상수를 이용하여 날짜와 시간 중 원하는 대상을 변경하는 메소드
        calendar.set(Calendar.DATE,1); // Calendar객체를 1로 변경

        // Calendar 객체에 저장된 날짜와 시간 중 [요일]을 반환받아 저장
        int week = calendar.get(Calendar.DAY_OF_WEEK); // DAY_OF_WEEK : 요일
        // System.out.println("week = " + week);

        System.out.println("         " + calendar.get(Calendar.YEAR) + "년 "
                +(calendar.get(Calendar.MONTH) + 1) + "월");
        System.out.println("-----------------------------");
        System.out.println("  일  월  화  수  목  금  토");
        System.out.println("-----------------------------");;

        // [1일]을 출력하기 전까지의 요일을 공백으로 출력
        for(int i = 1; i < week; i++) {
            System.out.print("    ");
        }

        // 1일부터 31일까지 출력
        for (int i = 1; i <= calendar.getActualMaximum(Calendar.DATE); i++) {
            // 날짜 출력 >> 자릿수 맞춤
            if(i <= 9) {
                System.out.print("   " + i);
            } else {
                System.out.print("  " + i);
            }

            week++;
            if (week % 7 == 1) { // 다음 출력값이 일요일인 경우
                System.out.println();
            }

        }
        System.out.println();
        System.out.println("-----------------------------");
    }
}


         2023년 4월
-----------------------------
  일  월  화  수  목  금  토
-----------------------------
                           1
   2   3   4   5   6   7   8
   9  10  11  12  13  14  15
  16  17  18  19  20  21  22
  23  24  25  26  27  28  29
  30
-----------------------------