ランダム抽選


コンソールウィンドウで実施されるランダムチーム抽選.人数チーム人数人名.
入力を受信し、チームをランダムに割り当てて出力します.人数/チーム数
分流時の人員流出問題は解決されていない.
作成日が21.109.09の所要時間は5時間です.

ソースコード

package RandomSadari;

import java.util.Random;
import java.util.Scanner;
import java.util.Arrays;
public class Main 
{
    
	
	
	public static void main(String[] args) 
	{   Random random = new Random();
		Scanner sc = new Scanner(System.in);
		int k=0;
		System.out.println("사람수 입력:");
		int num_crew = sc.nextInt();                        //사람수 = num_crew 입력받기
	    System.out.println("팀수입력 :");
		int crew = sc.nextInt();                           //팀수 = crew 입력받기
		int div_crew = num_crew/crew;                     
		String[] name_crew = new String[num_crew];          // 사람이름 = name_crew배열 생성
		int[] num_random = new int[num_crew];               //팀추첨 변수 =  num_random 생성
		String[][] crew2 = new String[crew][div_crew]; 	//나눈 팀원들을 담을 배열
		
		for(int i=0;i<name_crew.length;i++)                 // 사람이름 입력받기 
		{   System.out.println(i+1 +"번째 사람이름 입력 :" );
			name_crew[i] = sc.next();
		}
		
		for (int i = 0; i < num_random.length; i++) 
		{
		num_random[i] = random.nextInt(num_crew); // 팀원 추첨할 변수 배열 생성- 중복없음
			for(int j=0; j<i; j++)
			{
				if(num_random[i]==num_random[j]) {i--; break;}	        	
			}	 
	    }
		
		for (int i = 0; i < crew2.length; i++) 
		{
			for (int j = 0; j < crew2[i].length; j++) 
			{
				crew2[i][j] = name_crew[num_random[k]];
				k++;
			}
		}
		
		for(int i=0;i<crew2.length;i++)
		{   System.out.print(i+1+"팀   ");
			System.out.println(Arrays.toString(crew2[i]));
		}
		sc.close();
	}
}

論理的説明

  • 人の長さの配列(num random)を生成し、重複しない整数値を割り当てます.(楽透記事を参照)
  • name crew[num random[k]=>kは0からインクリメントし、2次元配列(crew 2)に入れます.
    これにより,名前の重複がない2次元配列にうまく含まれる.
    =>人数が10の場合、num random配列{4、8、1、5、3、0、7、2、9、6}がこのように作成されます.
    ドアの周りを回っているので
    1番目=name crew[4]
    2番目=name crew[8]
    3番目=name crew[1]...こうして値切った.
  • 実行画面



    に質問


    例えば、5人を2組に分ける場合
    1チームの人3人5
    2チームの人1人4
    このように一人を漏らす.
    crew 2の列長をdiv crewに設定すると,このような問題が発生し,多くのことを考慮したが解決しなかった.

    ポスト


    宝くじ番号生成器を作成する際に使用する論理を利用して作成されます.
    name crew[num random[k]<=この論理を実現する際、Googleも見つからず、難しすぎます.
    彼は頭を絞って、その1時間4時間しか考えていなかったが、やっと思いついた.
    問題はArrayList