【JAVA】「복권으로 자리 바꾸기+파일 출력(CSV)」「플로우차트 작성(plantuml)」

개요



"복권으로 자리 바꾸기 + 파일 출력 (CSV)"하는 간단한 프로그램입니다.
순서도도 만들었습니다.



비고


인원수
18명

출석 번호(ID)
0-17

전석 희망자(KIBOU)
n명(복수 가능)

복권
18장

복권 번호 (KUJI)
0-17

좌석 번호 (희망자)
0-n

좌석 번호(기타)
n-18


※석 번호가 작을 정도가 되기 때문에, 희망 인원수에 맞추어 복권 번호를 한정한다

좌석표




0
1
2
3
4


5
6
7
8
9

10
11
12
13
14

15
16
17
18



순서도(베타 버전)



※ plantuml의 코드는 에 기재되어 있습니다



샘플





비고


앞 좌석 희망자
3명

좌석 번호 (희망자)
0-2

좌석 번호(기타)
3-18


코드



Sekigae.java
import java.io.*;
import java.util.Arrays;

public class Sekigae {
    static int KUJI_MIN, KUJI_MAX, KUJI_NUM;

    static String FILE_NAME = "test.csv";
    static Integer[] KIBOU = { 5, 10, 15 };
    static int[][] DATA = new int[18][2];
    static boolean[] KUJI = new boolean[18];

    /***
     * くじ引きで席順を決める
     *
     * @param args
     */
    public static void main(String[] args) {
        try {
            // データ取得
            DATA = getData();

            // ファイルの設定
            FileWriter fw = new FileWriter(FILE_NAME);
            BufferedWriter bw = new BufferedWriter(fw);
            PrintWriter pw = new PrintWriter(bw);

            // ファイルに出力
            pw.println("ID,番号");
            for (int[] item : DATA) {
                pw.println(item[0] + "," + item[1]);
            }
            pw.close();

        } catch (IOException e) {
            System.out.println(e);
        } finally {
            System.out.println("処理終了");
        }

    }

    /***
     * くじ引き
     *
     * @return data くじ引きの結果
     */
    private static int[][] getData() {
        for (int i = 0; i < KUJI.length; i++) {
            // 希望者かどうか
            boolean isKibou = Arrays.asList(KIBOU).contains(i);

            // 席(min~max)
            KUJI_MIN = (isKibou) ? 0 : KIBOU.length;
            KUJI_MAX = (isKibou) ? KIBOU.length : 19;

            // 判定: 重複 OR 席(min~max)
            do {
                KUJI_NUM = (int) (Math.random() * 18);
            } while (KUJI[KUJI_NUM] || ((KUJI_NUM >= KUJI_MIN) == false) || ((KUJI_NUM < KUJI_MAX) == false));

            // 確定
            DATA[i][0] = i;
            DATA[i][1] = KUJI_NUM;
            KUJI[KUJI_NUM] = true;
        }
        return DATA;
    }
}


출력된 CSV



test.csv
ID,番号
0,3
1,14
2,15
3,9
4,6
5,0
6,17
7,13
8,12
9,5
10,1
11,10
12,8
13,4
14,11
15,2
16,7
17,16



plantuml 코드(베타)



Sekigae.pu
@startuml くじ引きで席替え
title くじ引きで席替え
start
start
partition くじ引き(全員) {
    ' クラスの定義
    note left
        = 定義
        ====
        === クラス
        * 人数     : 18人
        * 出席番号   : 0~17
        * 前の席希望者 : n人(複数可)
        ----
        === くじ
        * くじ   : 18個
        * 順番   : 小→大
        * 席番号  : 0~17(min~max)
        ** 希望者 : 0~(n-1)
        ** その他 : n~17
        * 使用状況
        ** 未使用[-] : false
        ** 使用済[×] : true
    end note

    repeat: 箱もらう;
      partition くじ引き(個人) {

        note left
            = 判断処理_A
            ====
            * 未使用
            * min >= くじ番号
            * くじ番号 < max
        end note

        repeat: くじを引く;
          backward :箱に戻す;
        repeat while (判断処理_A) is (No) not (Yes)
        : ・くじに「×」をつける \n ・箱に戻す;
        :紙に「出席番号」「くじ番号」を書く;
      }
      backward :次の人に渡す;
    repeat while (出席番号が18以下) is (No) not (Yes)
}
end
@enduml

플로우 차트 다이어그램 (레거시 버전)





plantuml 코드(레거시 버전)


@startuml くじ引きで席替え
title くじ引きで席替え
(*)--> "箱もらう"
note left
        = 定義
        ====
        === クラス
        * 人数     : 18人
        * 出席番号   : 0~17
        * 前の席希望者 : n人(複数可)
        ----
        === くじ
        * くじ   : 18個
        * 順番   : 小→大
        * 席番号  : 0~17(min~max)
        ** 希望者 : 0~(n-1)
        ** その他 : n~17
        * 使用状況
        ** 未使用[-] : false
        ** 使用済[×] : true
end note
"箱もらう" -right-> "くじを引く"
"くじを引く"-right-> "くじが未使用"
"くじが未使用" -->[no] "箱に戻す"
"箱に戻す" -->"くじを引く"
"くじが未使用" -right->[yes] "くじ番号 < max"
"くじに「×」をつけ、箱に戻す" --> "紙に「出席番号」「くじ番号」を書く"
"くじ番号 < max" -->[no] "箱に戻す"
"紙に「出席番号」「くじ番号」を書く" --> "出席番号 < 18"
"くじ番号 < max" -right->[yes] "min >= くじ番号"
"min >= くじ番号" ->[no] "箱に戻す"
"min >= くじ番号" -->[yes] "くじに「×」をつけ、箱に戻す"
"次の人に渡す" --> "箱もらう"
"出席番号 < 18" --> [no] "次の人に渡す"
"出席番号 < 18" -->  [yes] (*)
@enduml

좋은 웹페이지 즐겨찾기