【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
Reference
이 문제에 관하여(【JAVA】「복권으로 자리 바꾸기+파일 출력(CSV)」「플로우차트 작성(plantuml)」), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/namari/items/290d7b39fe63a71337e3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)