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번을 제공하며 기회를 모두 소진한 경우 난수값 출력
// > 난수값과 키보드 입력값은 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
-----------------------------