배열 섞기 - 배열의 요소의 순서를 반복해서 바꾼다(카드 섞기, 로또번호 생성 등)

 

suffle( )

Math클래스의 random 함수로 난수를 발생해 그 값을 저장해서 인덱스로 사용한다.

난수는 0.0 ~ 0.1 사이의 값을 반환하므로 만약 난수 발생 범위가 정해져 있다면

난수 발생 후 범위만큼 곱하면 된다.

ex) 0 ~ 5 사이의 값을 난수로 받고 싶다면

Math.random() *5;

밑의 예시도 배열 크기가 5라서 난수 발생을 5 안으로 조절해서 사용했다.

int[] shuffle() {
		int[] arr = {1, 3, 23, 5, 12};
		String str = "";
		
		for(int i = 0; i< arr.length; i++) {
			double random = Math.random()*5;
            
            // math클래스의 random함수로 난수를 발생시킴
            
			int ran = (int) random;
            
			int tmp = arr[ran];
			arr[ran] = arr[i];
			arr[i]= tmp;
            
            // 난수를 발생시킨 값을 배열 인덱스로 넣어서 아무렇게 섞이도록 함
            
		}
        
		return arr;
	}

 

main ( )

shuffle을 끝내지 않으면 계속 동작하게 하도록 while문을 써서 계속 호출할 수 있도록 하였다.

끝내겠다는 표시인 "q"를 입력하기 전에는 계속 동작하도록 했다.

멈추기 위해서 if문을 두었고 조건은 시그널 값이 비어있으면 계속 shuffle을 호출하므로

엔터를 치면 계속 shuffle()을 호출하며 섞을 것이다.

public static void main(String[] args) {
		ArrayPrac_shuffle ss = new ArrayPrac_shuffle();
		Scanner scanner = new Scanner(System.in);
		
		System.out.println("섞기 : s, 끝내기 : q");
		
		while (true) {
		
			String signal = scanner.nextLine();
			
			if (signal.equals("q")) {
				break;
			} else if(signal.equals("s")) {
				ss.shuffle();
				continue;
			} else {
				System.out.println("잘못 눌렸습니다.");
				continue;
			}
			
		}
		scanner.close();
	}

 

전체 코드

public class ArrayPrac_shuffle {
/*섞기
 * 배열의 요소의 순서를 반복해서 바꾼다(카드 섞기, 로또번호 생성 등)
 */
	
	int[] shuffle() {
		int[] arr = {1, 3, 23, 5, 12};
		String str = "";
		
		for(int i = 0; i< arr.length; i++) {
			double random = Math.random()*5;
			int ran = (int) random;
			int tmp = arr[ran];
			arr[ran] = arr[i];
			arr[i]= tmp;
		}
		for(int i = 0; i< arr.length; i++) {
			if(i<arr.length-1) {
				str += arr[i]+", ";
			}else {
				str += arr[i]+"";
			}
		}
		
		System.out.println(str);
		return arr;
	}
	public static void main(String[] args) {
		ArrayPrac_shuffle ss = new ArrayPrac_shuffle();
		Scanner scanner = new Scanner(System.in);
		
		System.out.println("섞기 : s, 끝내기 : q");
		
		while (true) {
		
			String signal = scanner.nextLine();
			
			if (signal.equals("q")) {
				break;
			} else if(signal.equals("s")) {
				ss.shuffle();
				continue;
			} else {
				System.out.println("잘못 눌렸습니다.");
				continue;
			}
			
		}
		scanner.close();
	}

}

 

결과

+ Recent posts