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 범위의 난수 발생
public class NewPasswordApp {
//새로운 비밀번호를 생성하여 반환하는 메소드
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();
}
public static String newPasswordTwo() {
//UUID.randomUUID() : 자동으로 생성된 식별자가 저장된 UUID객체를 생성하여 반환
//UUID 객체의 식별자는 숫자와 영문자(소문자),-(4개)의 36개의 문자로 구성
//UUID.toString() : 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()); }}
BaseBallApp : 정수난수(0~9)를 3개 제공받아 키보드로 입력하여 맞추는 게임
난수와 키보드 입력값은 0~9 범위의 3개의 정수값으로 서로 다르며 0으로 시작 불가능
키보드 입력값이 형식에 맞지 않은 경우 재입력되도록 작성
난수와 입력값을 서로 비교하여 동일한 정수값이 존재할 경우 위치가 같으면 스트라이크 처리하고 다르면 볼로 처리하여 계산
스트라이크가 3개라면 성공 메세지 출력 후 프로그램을 종료하고 아니라면 스트라이크와 볼의 갯수 출력
키보드 입력 기회는 15번을 제공하며 15번 이내에 맞추지 못한 경우 정답(난수) 출력
public class BaseBallApp {
public static void main(String[] args) {
Random random=new Random();
//0~9 범위의 정수값 3개를 저장하기 위한 배열 선언 (난수값을 저장하기 위한 배열)
int[] dap=new int[3];
//규칙에 맞는 난수값을 배열 요소에 저장하도록 처리하는 반복문
while(true) {
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];
//정답 관련 상태정보를 저장하기 위한 변수
boolean result=false;
//키보드로 정수값을 입력받기 위한 기회를 제공하는 반복문
// → 키보드 입력값을 난수값과 비교하여 결과 출력
for(int cnt=1;cnt<=15;cnt++) {
//스트라이크와 볼의 갯수를 저장하기 위한 변수 선언
int strike=0, 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++) {
//정수값으로 지정한 문자코드(CharacterCode)-'0':48 ~'9':57
//ex)'4'-'0'=4 즉,숫자 문자에 -'0'을 하면 추출된 문자는 정수값
num[i]=input.charAt(i)-'0';
if(num[i]<0 || num[i]>9) {//비정상적인 값이 입력된 경우
System.out.println("[에러]숫자값만 입력 가능합니다.");
continue loop;
}
}
//규칙에 맞는 입력값인 경우에만 반복문 종료
if(num[0]!=0 && num[0]!=num[1] && num[1]!=num[2] && num[2]!=num[0])
break;
System.out.println("[에러]0으로 시작되거나 중복된 숫자가 존재.");
}
//난수값과 키보드 입력값을 비교하여 스트라이크와 볼을 구분하여 계산
// → 난수값과 키보드 입력값을 교차 비교하도록 중첩된 for 구문 사용
for(int i=0;i<dap.length;i++) {//난수값을 처리하기 위한 반복문
for(int j=0;j<num.length;j++) {//키보드 입력값을 처리하기 위한 반복문
if(dap[i]==num[j]) {//배열의 요소값이 같은 경우
if(i==j) {//배열 요소의 위치가 값은 경우
strike++;
} else {
ball++;
}
}
}
}
if(strike==3) {
System.out.println("[메세지]"+cnt+"번만에 맞췄습니다.");
result=true;
break;
}
System.out.println("[결과]"+strike+"스트라이크 "+ball+"볼");
}
if(!result) {//제공된 기회동안 정답을 맞추지 못한 경우
System.out.print("[메세지]정답을 못 맞췄군요. 정답은 [");
for(int su:dap) {
System.out.print(su);
}
System.out.println("]입니다.");
}
scanner.close(); }}
Date 클래스 : 날짜와 시간을 저장하고 날짜와 시간 관련 기능을 메소드로 제공하기 위한 클래스
Date.toString() : Date 객체에 저장된 날짜와 시간을 문자열로 변환하여 반환하는 메소드
Date.getYear() : Date 객체에 저장된 날짜와 시간에서 [년]을 반환하는 메소드
Date.getMonth() : Date 객체에 저장된 날짜와 시간에서 [월]을 반환하는 메소드
Date.getDate() : Date 객체에 저장된 날짜와 시간에서 [일]을 반환하는 메소드
Date.getDay() : Date 객체에 저장된 날짜와 시간에서 [요일]를 반환하는 메소드
Date.getTime() : Date 객체에 저장된 날짜와 시간을 long 자료형의 정수값(TimeStamp)으로 반환하는 메소드
System.currentTimeMillis() : 시스템의 현재 날짜와 시간에 대한 타입스템프를 반환하는 메소드
public class DateApp {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
//Date 클래스의 객체를 생성하면 시스템의 현재 날짜와 시간이 저장된 객체 생성
Date now=new Date();
//Date.toString() : 문자열로 변환하여 반환하는 메소드(참조변수 출력시 자동 호출)
//System.out.println("now.toString() = "+now.toString());
System.out.println("now = "+now);
//요일을 저장하기 위한 배열 선언
String[] day={"일","월","화","수","목","금","토"};
String printDate=(now.getYear()+1900)+"년 "+(now.getMonth()+1)+"월 "
+now.getDate()+"일 "+day[now.getDay()]+"요일";
System.out.println("현재 = "+printDate);
//Date.getTime() : 날짜와 시간을 long 자료형의 정수값(TimeStamp)으로 반환
//타임스템프(TimeStamp) : 1970년 1월 1일을 기준으로 1ms마다 1씩 증가된 정수값
//long nowTime=now.getTime();
//System.currentTimeMillis() : 시스템의 현재 날짜와 시간에 대한 타입스템프를 반환하는 메소드
long nowTime=System.currentTimeMillis();
System.out.println("nowTime = "+nowTime);
//[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("결과(일)="+((nowTime-wantTime)/1000)/86400); }}
날짜와 시간을 저장하고 날짜와 시간 관련 기능을 메소드로 제공하기 위한 클래스
Calendar.getInstance() : 시스템의 현재 날짜와 시간이 저장된 Calendar 객체를 생성하여 반환하는 메소드
Calendar.toString() : Calendar 객체에 저장된 날짜와 시간을 문자열로 반환하는 메소드
Calendar.get(int field) : Calendar 객체에 저장된 날짜와 시간에서 매개변수에 전달된 Calendar 클래스의 상수에 대한 값을 반환하는 메소드
Calendar.set(int field, int value) : Calendar 객체에 날짜와 시간에서 매개변수로 전달된 Calendar 클래스의 상수에 대한 값을 변경하는 메소드
Calendar.getActualMaximum(int field) : Calendar 객체에 저장된 날짜와 시간에서 매개변수에 전달된 Calendar 클래스의 상수에 대한 최대값을 반환하는 메소드
public class CalendarApp {
public static void main(String[] args) {
//Calendar.getInstance() : Calendar 객체를 생성하여 반환하는 메소드
Calendar calendar=Calendar.getInstance();
//Calendar.toString() : 날짜와 시간을 문자열로 반환하는 메소드
//System.out.println("calendar.toString() = "+calendar.toString());
System.out.println("calendar = "+calendar);
String[] day={"일","월","화","수","목","금","토"};
//Calendar.get(int field):매개변수에 전달된 Calendar 클래스의 상수에 대한 값 반환
// → [월]은 0~11 범위의 정수값, [요일]은 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]+"요일";
System.out.println("현재 = "+printDate); }}
public class CurrentCalendarApp {
public static void main(String[] args) {
//시스템의 현재 날짜와 시간이 저장된 Calendar 객체를 반환받아 저장
Calendar calendar=Calendar.getInstance();
//Calendar.set(int field, int value) : Calendar 클래스의 상수 값을 변경
//Calendar 객체에 저장된 날짜와 시간 중 [일]을 [1일]로 변경
calendar.set(Calendar.DATE, 1);
//Calendar 객체의 [요일]을 반환받아 저장 (1(일)~7(토) 범위의 정수값 반환)
int week=calendar.get(Calendar.DAY_OF_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일부터 [월]의 마지막 날짜까지 출력
//Calendar.getActualMaximum(int field) : Calendar의 최대값을 반환
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("============================");}}
값을 변환하는 기능을 제공하는 클래스가 선언된 패키지
SimpleDateFormat : Date 객체와 String 객체를 서로 변환하기 위한 기능을 메소드로 제공하는 클래스
DecimalFormat : Number 객체(숫자값)와 String 객체를 서로 변환하기 위한 기능을 메소드로 제공하는 클래스
Date 객체와 String 객체를 서로 변환하기 위한 기능을 메소드로 제공하는 클래스
SimpleDateFormat(String pattern) : 날짜와 시간에 대한 패턴정보가 저장된 SimpleDateFormat 객체를 생성하기 위한 생성자
SimpleDateFormat.format(Date date) : 매개변수로 전달받은 Date 객체에 저장된 날짜와 시간을 SimpleDateFormat 객체에 저장된 패턴정보를 이용하여 문자열로 변환하여 반환하는 메소드
SimpleDateFormat.applyPattern(String pattern) : SimpleDateFormat 객체에 저장된 패턴정보를 변경하는 메소드
SimpleDateFormat.parse(String str) : SimpleDateFormat 객체에 저장된 패턴정보 형식의 문자열을 매개변수로 전달받아 Date 객체로 변환하여 반환하는 메소드
public class SimpleDateFormatApp {
public static void main(String[] args) {
Date now=new Date();
//SimpleDateFormat(String pattern) : 날짜와 시간에 대한 패턴정보가 저장된
//SimpleDateFormat 객체를 생성하기 위한 생성자
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy년 MM월 dd일 E요일");
//SimpleDateFormat.format(Date date) : 매개변수로 전달받은 Date 객체의 날짜와
//시간을 SimpleDateFormat 객체에 저장된 패턴정보를 이용하여 문자열로 변환
String printDate=dateFormat.format(now);//Date >> String
System.out.println("현재 = "+printDate);
//SimpleDateFormat.applyPattern(String pattern) : 패턴정보를 변경
dateFormat.applyPattern("yyyy-MM-dd HH:mm:ss");
System.out.println("현재 = "+dateFormat.format(now));
String want="2000-01-01 00:00:00";
try {
//SimpleDateFormat.parse(String str) : Date 객체로 변환
// => SimpleDateFormat 패턴정보와 일치하지 않을 경우 ParseException 발생
Date wantDate=dateFormat.parse(want);//String >> Date
System.out.println("wantDate = "+wantDate);
} catch (ParseException e) {
System.out.println("[에러]형식에 맞지 않는 날짜와 시간입니다."); }}}
Number 객체(숫자값)와 String 객체를 서로 변환하기 위한 기능을 메소드로 제공하는 클래스
DecimalFormat(String pattern) : 숫자값에 대한 패턴정보가 저장된 DecimalFormat 객체를 생성하기 위한 생성자
DecimalFormat.format(long number) : 매개변수로 숫자값을 전달받아 DecimalFormat 객체에 저장된 패턴정보의 문자열로 변환하여 반환하는 메소드
DecimalFormat.getInstance() : 숫자값에 대한 기본 패턴정보가 저장된 DecimalFormat 객체를 반환하는 메소드
DecimalFormat.getCurrencyInstance() : 숫자값에 대한 화폐단위가 포함된 기본 패턴정보가 저장된 DecimalFormat 객체를 반환하는 메소드
public class DecimalFormatApp {
public static void main(String[] args) {
//DecimalFormat(String pattern) : 숫자값에 대한 패턴정보가 저장된 객체 생성
DecimalFormat decimalFormat=new DecimalFormat("###,###,##0");
int money=100000000;
System.out.println("금액 = "+money+"원");
//DecimalFormat.format(long number) : DecimalFormat 패턴정보의 문자열로 변환
System.out.println("금액 = "+decimalFormat.format(money)+"원");
decimalFormat.applyPattern("$##,###,##0.00");
System.out.println("금액 = "+decimalFormat.format(money));
//DecimalFormat.getInstance() : 패턴정보가 저장된 DecimalFormat 객체를 반환
System.out.println("금액 = "+DecimalFormat.getInstance().format(money));
//DecimalFormat.getInstance() : 화폐단위가 포함된 기본 패턴정보가 저장된
//DecimalFormat 객체를 반환하는 메소드
System.out.println(DecimalFormat.getCurrencyInstance().format(money)); }}
public class DayCalculateApp {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
Date birthday=null;
System.out.print("생년월일 입력[ex.2000-01-01] >> ");
try {
//키보드로 입력받은 문자열을 Date 객체로 변화하여 저장
//입력받은 문자열이 SimpleDateFormat 객체에 저장된 패턴정보와 맞지 않을
//경우 ParseException 발생 (일반 예외이므로 반드시 예외처리해야 에러 미발생)
birthday=dateFormat.parse(scanner.nextLine());
} catch (ParseException e) {
System.out.println("[에러]생년월일을 형식에 맞게 입력해 주세요.");
System.exit(0);
} finally {
scanner.close();
}
//살아온 날짜를 계산하여 출력
long day=(System.currentTimeMillis()-birthday.getTime())/(1000*60*60*24);
System.out.println("[결과]태어난지 "+day+"일이 지났습니다.");
}
}
public class WantCalendarApp {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("년 입력 >> ");
int year=scanner.nextInt();
System.out.print("월 입력 >> ");
int month=scanner.nextInt();
scanner.close();
//시스템의 현재 날짜와 시간이 저장된 Calendar 객체를 반환받아 저장
Calendar calendar=Calendar.getInstance();
//Calendar 객체에 저장된 날짜를 입력된 년월에 대한 1일로 변경
// → 월은 0~11 범위의 정수값으로 처리되므로 입력값에서 1을 감소하여 변경
calendar.set(year, month-1, 1);
int week=calendar.get(Calendar.DAY_OF_WEEK);
System.out.println();
System.out.println(" "+year+"년 "+month+"월");
System.out.println("============================");
System.out.println(" 일 월 화 수 목 금 토");
System.out.println("============================");
for(int i=1;i<week;i++) {
System.out.print(" ");
}
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("============================");
}
}