반응형
01. Random클래스
1. RandomApp 프로그램
package xyz.itwill.util;
import java.util.Random;
//java.util 패키지 : 프로그램 작성에 유용한 기능을 제공하는 클래스가 선언된 패키지
//Scanner 클래스 : 입력장치로부터 값을 입력받기 위한 기능을 메소드로 제공하는 클래스
//Arrays 클래스 : 배열 요소를 처리하기 위한 기능을 메소드로 제공하는 클래스
//Random 클래스 : 난수값을 관련 기능을 메소드로 제공하는 클래스
//Date 클래스 : 날짜와 시간을 저장하고 날짜와 시간 관련 기능을 메소드로 제공하는 클래스
//Calendar 클래스 : 날짜와 시간을 저장하고 날짜와 시간 관련 기능을 메소드로 제공하는 클래스
//자료구조 클래스(Collection Class) : 다수의 객체를 효율적으로 저장하고 관리하기 위한 기능을
//메소드로 제공하는 클래스 - HashSet, ArrayList, HashMap 등
// => Collection 인터페이스(Set 인터페이스와 List 인터페이스의 부모 인터페이스) 또는
//Map 인터페이스를 상속받은 자식클래스
public class RandomApp {
public static void main(String[] args) {
Random random1 = new Random(1); //실행할때마다 같은 난수값 발생
for (int i = 1; i <= 5; i++){
System.out.println(i+"번째 정수난수 = "+ random1.nextInt(100)); //0~99 범위의 난수 발생
}
//1번째 정수난수 = 85
//2번째 정수난수 = 88
//3번째 정수난수 = 47
//4번째 정수난수 = 13
//5번째 정수난수 = 54
//..
// => 여러번 실행해도 같은 값
Random random2=new Random();
//Random.nextInt(int bound) : 0~bound-1 범위의 정수난수를 발생하여 반환하는 메소드
for(int i=1;i<=5;i++) {
System.out.println(i+"번째 정수난수 = "+random2.nextInt(100));//0~99 범위의 난수 발생
}
//1번째 정수난수 = 17
//2번째 정수난수 = 78
//3번째 정수난수 = 40
//4번째 정수난수 = 18
//5번째 정수난수 = 36
//..
// => 여러번 실행하면 결과 계속 달라짐
}
}
2. ⚾️BaseBallApp프로그램
package xyz.itwill.util;
import java.util.Random;
import java.util.Scanner;
//숫자야구게임 : 정수난수(0 ~ 9)를 3개 제공받아 키보드로 입력하여 맞추는 게임
//=> 난수와 키보드 입력값은 0 ~ 9 범위의 3개의 정수값으로 서로 다르며 0으로 시작 불가능
//=> 키보드 입력값이 형식에 맞지 않은 경우 재입력되도록 작성
//=> 난수의 입력값은 0 ~ 9 범위의 3개의 정수값으로 서로 다르며 0으로 시작 불가능
//=> 난수와 입력값을 비교하여 동일한 정수값이 존재할 경우 위치가 같은면 스트라이크 처리하고,
//다르면 볼로 처리하여 계산
//=> 스트라이크가 3개 라면 성공 메세지 출력 후 프로그램 종료하고,
// 아니라면 스트라이크와 볼의 갯수 출력
//=> 키보드 입력 기회는 15번 제공
public class BaseBallApp {
public static void main(String[] args) {
//1.
Random random = new Random();
//2.
//0~9 범위의 정수값 3개를 저장하기 위한 배열 선언 - 난수값을 저장하기 위한 배열
int[] dap = new int[3];
//3.
//규칙에 맞는 난수값을 배열 요소에 저장하도록 처리하는 반복문
while(true) {
for(int i = 0; i<dap.length; i++) {
dap[i] = random.nextInt(10);
}
//규칙에 맞는 난수값인 경우에만 반복문 종료
if(dap[0] != 0 && dap[0]!=dap[1] && dap[1]!=dap[2] && dap[2]!=dap[0]) break;
}
//for(int num:dap) { System.out.print(num); } //973
//System.out.println();
//4.
Scanner scanner = new Scanner(System.in);
//5.
//0~9 범위의 정수값 3개를 저장하기 위한 배열 선언 - 키보드 입력값을 저장하기 위한 배열
int[] num = new int[3];
//6.
boolean result = false; //정답 관련 상태정보를 저장하기 위한 변수
//7.
//키보드로 정수값을 입력받기 위한 기회를 제공하는 반복문
//=> 키보드 입력값을 난수값과 비교하여 결과 출력
for(int cnt =1; cnt<=15; cnt++) {
//7-1.
int strike = 0, ball = 0; //스트라이크와 볼의 갯수를 저장하기 위한 변수 선언
//7-2.
loop:
while(true) { //키보드 입력값에 대한 검증을 위한 반복문
System.out.print(cnt +"번째 입력 >> ");
String input = scanner.nextLine();
if(input.length() != 3) { //입력값이 3자리가 아니라면 에러메세지 출력 후, 밑에 명령 실행안하고 다시 반복문 반복
System.out.println("[에러]3자리의 숫자만 입력 가능합니다.");
continue;
}
for(int i = 0; i<num.length; i++) { //입력된 문자열에서 문자를 추출하여 배열 요소에 저장 - 문자열의 문자를 추출하여 정수값으로 변환하여 저장
num[i] = input.charAt(i) - '0'; //문자코드(CharacterCode) : '0':48 ~ '9':57 ex) '4'-'0' = 52 - 48 = 4 => 즉, 문자 - '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으로 시작되거나 중복된 숫자가 존재합니다.");
}
//7-3.
//난수값과 키보드 입력값을 비교하여 스트라이크와 볼을 구분하여 계산
//=> 난수값과 키보드 입력값을 교차 비교되도록 중첩된 for 구문 사용
for(int i=0; i<num.length; i++){//난수값을 처리하기 위한 반복문
for(int j=0; j<num.length; j++){//키보드 입력값을 처리하기 위한 반복문
if(dap[i]==num[j]){ //배열의 요소값이 같은 경우
//배열 요소의 위치가 같은 경우
if(i==j)strike++;
else ball++;
}
}
}
//7-4.
if(strike==3) {
System.out.println("[메세지]축하합니다." +cnt+"번 만에 맞췄습니다.");
result = true;
break;
}
//7-5.
System.out.println("[결과]"+strike+"스트라이크"+ball+"볼");
}
//8.
if(!result) {//제공된 기회동안 정답을 맞추지 못한 경우
System.out.print("[메세지]정답을 못 맞췄군요. 정답은 [");
for(int su:dap) {
System.out.print(su);
}
System.out.print("]입니다.");
}
//9.
scanner.close();
}
}
//1번째 입력 >> 123
//[결과]0스트라이크1볼
//2번째 입력 >> 456
//[결과]0스트라이크1볼
//3번째 입력 >> 789
//[결과]0스트라이크1볼
//4번째 입력 >> 147
//[결과]0스트라이크1볼
//5번째 입력 >> 124
//[결과]1스트라이크0볼
//6번째 입력 >> 235
//[결과]1스트라이크0볼
//7번째 입력 >> 134
//[결과]2스트라이크0볼
//8번째 입력 >> 734
//[결과]2스트라이크0볼
//9번째 입력 >> 834
//[메세지]축하합니다.9번 만에 맞췄습니다.
02. UUID클래스
1. 🔐NewPasswordApp프로그램
package xyz.itwill.util;
import java.util.Random;
import java.util.UUID;
//새로운 비밀번호를 제공하는 프로그램 작성
public class NewPasswordApp {
//방법1.
//새로운 비밀번호를 생성하여 반환하는 메소드 - 정적메소드
public static String newPassWordOne(){
Random random = new Random();
String str = "ABCDEFGHIJKLMNOPQRSYUVWXYZ0123456789~!@#$%^&*_-"; //비밀번호로 사용될 문자들이 저장된 문자열 생성
StringBuffer password = new StringBuffer();
for(int i = 1; i <=10; i++) password.append(str.charAt(random.nextInt(str.length())));
return password.toString();
}
//방법2.
public static String newPassWordTwo() {
//UUID클래스 : 범용적으로 사용되는 고유값을 생성하기 위한 기능을 메소드로 제공하는 클래스 - 절대로 값이 중복되지 않는 고유값!!!!
//UUID.randomUUID() : 식별자가 저장된 UUID 객체를 생성하여 반환하는 메소드
// => UUID 객체에 저장된 식별자는 숫자와 영문자(소문자만), -(4개)의 36개의 문자로 구성된 문자열
//UUID.toString() : UUID 객체에 저장된 식별자를 문자열로 반환
return UUID.randomUUID().toString().replace("-","").substring(0,10).toUpperCase();
}
//메인메소드
public static void main(String[] args) {
System.out.println("새로운 비밀번호 = "+ newPassWordOne()); //새로운 비밀번호 = OR8#V2N7R~
System.out.println("새로운 비밀번호 = "+ newPassWordTwo()); //새로운 비밀번호 = 173AA85CC2
}
}
반응형
'java > java.util & java.text' 카테고리의 다른 글
[java.util] 6. HashSet 클래스 & ArrayList 클래스 & HashMap 클래스 (0) | 2024.06.27 |
---|---|
[java.util] 5. Collection(자료구조)클래스 기초 (0) | 2024.06.27 |
[java.util] 4. Generic VS Non-Generic (0) | 2024.06.27 |
[java.text] 3. DecimalFormat 클래스 & SimpleDateFormat 클래스 (0) | 2024.06.26 |
[java.util] 2. Date 클래스 & Calendar 클래스 (0) | 2024.06.18 |