import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class Blog {
public static void main(String[] args) {
new Byul();
}
}
class Byul {
Scanner sc;
StringBuffer sb;
boolean run;
boolean isInputMismatch;
int[] arr;
List<Integer> list;
Set<Integer> set;
Byul() {
sc = new Scanner(System.in);
sb = new StringBuffer();
run = true;
isInputMismatch = false;
main();
sc.close();
}
void main() {
System.out.println("1 부터 45 까지 중복하지 않는 숫자 6개 생성하는 프로그램\n");
while (run) {
System.out.println(
"1. 배열 사용, 중복 확인 방식\n" +
"2. 배열 사용, 수동 셔플방식\n" +
"3. 리스트 사용, 중복 확인 방식\n" +
"4. 리스트 사용, 수동 셔플 방식\n" +
"5. 리스트 사용, 컬렉션즈 셔플 방식\n" +
"6. 해쉬셋 사용 방식\n" +
"7. 전체 실행\n" +
"0. 종료"
);
switch (sc.next()) {
case "1":
arrayCheckRedundant();
break;
case "2":
arrayManualShuffle();
break;
case "3":
listCheckRedundant();
break;
case "4":
listManualShuffle();
break;
case "5":
listCollectionsShuffle();
break;
case "6":
hashSet();
break;
case "7":
arrayCheckRedundant();
arrayManualShuffle();
listCheckRedundant();
listManualShuffle();
listCollectionsShuffle();
hashSet();
break;
case "0":
run = false;
break;
default:
isInputMismatch = true;
}
if (!isInputMismatch) {
System.out.println("다시하려면 y 입력");
run = sc.next().toLowerCase().contains("y");
}
}
System.out.println("종료");
}
// 배열 사용, 중복 확인
void arrayCheckRedundant() {
System.out.println("1. 배열 사용, 중복 확인 방식");
arr = new int[6];
for (int i = 0; i < 6; i++) {
arr[i] = (int) (Math.random() * 45) + 1;
for (int j = 0; j < i; j++) {
i = (arr[i] == arr[j]) ? i - 1 : i;
}
}
printResult(true);
}
// 배열 사용, 수동 셔플
void arrayManualShuffle() {
System.out.println("2. 배열 사용, 수동 셔플방식");
arr = new int[45];
int i = 0;
while (i < 45) {
arr[i] = ++i;
}
i = 0;
int r; // 무작위 인덱스
int t; // 임시 저장용 변수
while (i < 45) {
r = (int) (Math.random() * 45);
t = arr[i];
arr[i++] = arr[r];
arr[r] = t;
}
printResult(true);
}
// 리스트 사용, 중복 확인
void listCheckRedundant() {
System.out.println("3. 리스트 사용, 중복 확인 방식");
list = new LinkedList<>();
for (int i = 0; i < 6; i++) {
list.add((int) (Math.random() * 45) + 1);
for (int j = 0; j < i; j++) {
if (list.get(i) == list.get(j)) {
list.remove(i--);
}
}
}
printResult(false);
}
// 리스트 사용, 수동 셔플
void listManualShuffle() {
System.out.println("4. 리스트 사용, 수동 셔플 방식");
list = new LinkedList<>();
int i = 0;
while (i < 45) {
list.add(++i);
}
i = 0;
int r;
int t;
while (i < 45) {
r = (int) (Math.random() * 45);
t = list.get(i);
list.set(i++, list.get(r));
list.set(r, t);
}
printResult(false);
}
// 리스트 사용, 컬렉션즈 셔플
void listCollectionsShuffle() {
System.out.println("5. 리스트 사용, 컬렉션즈 셔플 방식");
list = new LinkedList<>();
int i = 0;
while (i < 45) {
list.add(++i);
}
Collections.shuffle(list);
printResult(false);
}
// 해쉬셋 사용
void hashSet() {
System.out.println("6. 해쉬셋 사용");
set = new HashSet<>();
while (set.size() < 6) {
set.add((int) (Math.random() * 45) + 1);
}
printResult();
}
// 출력
void printResult(boolean arrOrList) { // true: arr; false: list
sb.append("[ ");
int item;
for (int i = 0; i < 6; i++) {
item = arrOrList ? arr[i] : list.get(i);
sb.append(
(i < 5)
? ((item < 10) ? "0" + item : item) + ", "
: ((item < 10) ? "0" + item : item) + " ]"
);
}
System.out.println(sb);
sb.setLength(0);
if (arrOrList) {
arr = null;
} else {
list = null;
}
}
void printResult() { //hashSet; overloads printResult(boolean arrOrList)
Iterator<Integer> it = set.iterator();
int item;
boolean isFirst = true;
sb.append("[ ");
while (it.hasNext()) {
item = it.next();
sb.append(
(!isFirst)
? ", " + ((item < 10) ? "0" + item : item)
: ((item < 10) ? "0" + item : item)
);
isFirst = false;
}
sb.append(" ]");
System.out.println(sb);
sb.setLength(0);
set = null;
}
}
댓글
댓글 쓰기