Javaで席替えできました!
19時ころから取り掛かり始めて22時半までかかりました。
仕様としては、
・7人の席替えプログラム 男2 女5
・男は隣にならない
・2列で席順の3,4番は端同士なので男でも隣OK
・前回と全く席順にはならない
まず、
1. while(true)でくくってCollections.shuffle(list); で回します。
それで条件に当てはまればwhileから抜けていくという形にします。
2. if*1
⇒隣同士の比較を文字列でしています。
2-2. そのifに入っても席順3,4であれば隣でもいいので、
*2 || (!list.get(2).equals("名前2") && !list.get(3).equals("名前1")))
ならばcontinue;
3. 前回と一緒はダメなので、ファイルを読み込みます
3-2. 読み込んだファイルを(行があれば)行ごとにループで比較します。比較して同じならcontinue;
3-3. 何行読み込んだのかわかるようにcount++しときます。行がなければ抜けます。
4. countが6以外なら全部一緒ではないのでbreak;
4-1. ファイルも閉じます。
それを通過したら席替えは終了したので
5. ファイルに保存します。行で比較したいので行で保存。
5-2. ファイル閉じます。
自分一人ではできませんでしたね。。
すみません、22時過ぎまで手伝ってくださって。。。
*名前1と2は男です。
public class SheetChange {
public static void main(String args) {
// TODO 自動生成されたメソッド・スタブ
String sheet = { "名前1", "名前2", "名前3", "名前4", "名前5", "名前6", "名前7"};
List<String> list = new ArrayList<String>();
for (int i = 0; i < sheet.length; i++) {
list.add(sheet[i]);
}
while(true){
Collections.shuffle(list);
if*3{
if*4 || (!list.get(2).equals("名前2") && !list.get(3).equals("名前1"))){
continue;
}
}
File file = new File("c://work//sheetChange.txt");
FileReader fr;
BufferedReader br;
try {
if(file.exists()){
fr = new FileReader(file);
br = new BufferedReader(fr);
String line = null;
int count = 0;
while*5 != null){
if(line.equals(list.get(count))){
count++;
} else{
break;
}
}
if(count != 6){
break;
}
br.close();
}else{
break;
}
} catch (FileNotFoundException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
//ファイルに保存
File file = new File("c://work//sheetChange.txt");
FileWriter fw = null;
BufferedWriter bw = null;
PrintWriter pw = null;
try {
pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
for(int i =0; i < list.size(); i++){
pw.println(list.get(i));
}
pw.close();
System.out.println(list);
}
}
*1:list.toString().indexOf("名前1, 名前2") != -1) || (list.toString().indexOf("名前2, 名前1 ") != -1
*2:!list.get(2).equals("名前1") && !list.get(3).equals("名前2"
*3:list.toString().indexOf("名前1, 名前2") != -1) || (list.toString().indexOf("名前2, 名前1 ") != -1
*4:!list.get(2).equals("名前1") && !list.get(3).equals("名前2"