MoChiwakiブログ

女性エンジニアがゆる~く書く備忘録ブログ 〜だいたいいつもつまづいている〜

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"

*5:line = br.readLine(