배열, 리스트, 해쉬셋 연습 : 1 부터 45 까지 중복하지 않는 숫자 6개 생성하는 프로그램



 




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;
	}
}

댓글

이 블로그의 인기 게시물

substring 예제: 문자열을 입력 받아 한 글자씩 회전시켜 모두 출력하는 프로그램을 작성하라

단체 채팅 구현