import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;
public class Main {
Scanner scan
= new Scanner
(System.
in);
public static void main
(String[] args
) { Main m = new Main();
m.doJanken();
}
private void doJanken(){
System.
out.
println("コンピュータがじゃんけんをします。");
int cpuCount = getCpuCount();
HashMap
<Integer, Integer
> cpHandsMap
= getCpHands
(cpuCount
); judg(cpHandsMap);
}
private void judg
(HashMap
<Integer, Integer
> cpHandsMap
){ if(isAllHandKind(cpHandsMap)){
}
else{
int gameHands[] = getCpHandKind(cpHandsMap);
int result = (gameHands[0] - gameHands[1] + 3) % 3;
if (result == 0) {
} else if (result == 2) {
removeCpHands(gameHands[1], cpHandsMap);
showWinner(gameHands[0], cpHandsMap);
} else {
removeCpHands(gameHands[0], cpHandsMap);
showWinner(gameHands[1], cpHandsMap);
}
}
if(cpHandsMap.size() > 1){
judg(getCpHands(cpHandsMap));
}
else{
System.
out.
println("最終勝者が確定したので終了します。"); }
}
private void showWinner
(int hand, HashMap
<Integer, Integer
> cpHandsMap
){
for(Map.
Entry<Integer, Integer
> entry
: cpHandsMap.
entrySet()){ int cpHand
= (Integer)entry.
getValue(); if(cpHand == hand){
sbWinner.append(" コンピュータ" + entry.getKey());
}
}
System.
out.
println(sbWinner
+ "です。"); }
private void removeCpHands
(int hand, HashMap
<Integer, Integer
> cpHandsMap
){ ArrayList<Integer> removeList = new ArrayList<Integer>();
for(Map.
Entry<Integer, Integer
> entry
: cpHandsMap.
entrySet()){ if(entry.getValue() == hand){
removeList.add(entry.getKey());
}
}
for(int i=0; i < removeList.size(); i++){
cpHandsMap.remove(removeList.get(i));
}
}
private boolean isAllHandKind
(HashMap
<Integer, Integer
> cpHandsMap
){ for (HandsEnum handsEnum : HandsEnum.values()) {
if(!cpHandsMap.containsValue(handsEnum.getNum())){
return false;
}
}
return true;
}
private int[] getCpHandKind
( HashMap
<Integer, Integer
> cpHandsMap
){ int gameHands[] = new int[2];
int i=0;
for (HandsEnum handsEnum : HandsEnum.values()) {
if(cpHandsMap.containsValue(handsEnum.getNum())){
gameHands[i] = handsEnum.getNum();
i++;
}
}
return gameHands;
}
private int getCpuCount(){
System.
out.
println("コンピュータの人数を入力して下さい。(9人以内)"); String cpuCount
= scan.
nextLine();
if (!cpuCount.matches("[2-9]")){
System.
out.
println("2から9までの数字を入力して下さい。終了します。"); }
}
private <E
> HashMap
<Integer,Integer
> getCpHands
(E cpu
){
for(int i=0; i < cpuCount; i++){
int cpHandNum = random.nextInt(3);
String cpHand
= HandsEnum.
getEnumByNum(cpHandNum
).
toString(); System.
out.
println("コンピュータ" + i
+ "は" + cpHand
+ "です。");
cpHandsMap.put(i, cpHandNum);
}
}
cpHandsMap
= (HashMap
<Integer, Integer
>) cpu
; for(Map.
Entry<Integer, Integer
> entry
: cpHandsMap.
entrySet()){ int cpHandNum = random.nextInt(3);
String cpHand
= HandsEnum.
getEnumByNum(cpHandNum
).
toString(); System.
out.
println("コンピュータ" + entry.
getKey() + "は" + cpHand
+ "です。");
entry.setValue(cpHandNum);
}
}
return cpHandsMap;
}
private enum HandsEnum {
GOO("グー", 0),
TYOKI("チョキ", 1),
PAA("パー", 2),
;
private int num;
private HandsEnum
(String name,
int num
) { this.name = name;
this.num = num;
}
return name;
}
public int getNum() {
return num;
}
public static HandsEnum getEnumByNum(int num) {
for (HandsEnum handsEnum : HandsEnum.values()) {
if (handsEnum.getNum() == num) {
return handsEnum;
}
}
return null;
}
}
}
aW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKaW1wb3J0IGphdmEudXRpbC5NYXA7CmltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwppbXBvcnQgamF2YS51dGlsLlNjYW5uZXI7CgoKcHVibGljIGNsYXNzIE1haW4gewoJU2Nhbm5lciBzY2FuID0gbmV3IFNjYW5uZXIoU3lzdGVtLmluKTsKCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgkJTWFpbiBtID0gbmV3IE1haW4oKTsKCQltLmRvSmFua2VuKCk7Cgl9CgoJcHJpdmF0ZSB2b2lkIGRvSmFua2VuKCl7CgkJU3lzdGVtLm91dC5wcmludGxuKCLjgrPjg7Pjg5Tjg6Xjg7zjgr/jgYzjgZjjgoPjgpPjgZHjgpPjgpLjgZfjgb7jgZnjgIIiKTsKCgkJaW50IGNwdUNvdW50ID0gZ2V0Q3B1Q291bnQoKTsKCQlIYXNoTWFwPEludGVnZXIsIEludGVnZXI+IGNwSGFuZHNNYXAgPSBnZXRDcEhhbmRzKGNwdUNvdW50KTsKCQlqdWRnKGNwSGFuZHNNYXApOwoJfQoKCXByaXZhdGUgdm9pZCBqdWRnKEhhc2hNYXA8SW50ZWdlciwgSW50ZWdlcj4gY3BIYW5kc01hcCl7CgkJaWYoaXNBbGxIYW5kS2luZChjcEhhbmRzTWFwKSl7CgkJCVN5c3RlbS5vdXQucHJpbnRsbigi44GC44GE44GT44Gn44GZ44CCIik7CgkJfQoJCWVsc2V7CgkJCWludCBnYW1lSGFuZHNbXSA9IGdldENwSGFuZEtpbmQoY3BIYW5kc01hcCk7CgkJCWludCByZXN1bHQgPSAoZ2FtZUhhbmRzWzBdIC0gZ2FtZUhhbmRzWzFdICsgMykgJSAzOwoKCQkJaWYgKHJlc3VsdCA9PSAwKSB7CgkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIuOBguOBhOOBk+OBp+OBmeOAgiIpOwoJCQl9IGVsc2UgaWYgKHJlc3VsdCA9PSAyKSB7CgkJCQlyZW1vdmVDcEhhbmRzKGdhbWVIYW5kc1sxXSwgY3BIYW5kc01hcCk7CgkJCQlzaG93V2lubmVyKGdhbWVIYW5kc1swXSwgY3BIYW5kc01hcCk7CgkJCX0gZWxzZSB7CgkJCQlyZW1vdmVDcEhhbmRzKGdhbWVIYW5kc1swXSwgY3BIYW5kc01hcCk7CgkJCQlzaG93V2lubmVyKGdhbWVIYW5kc1sxXSwgY3BIYW5kc01hcCk7CgkJCX0KCQl9CgoJCWlmKGNwSGFuZHNNYXAuc2l6ZSgpID4gMSl7CgkJCWp1ZGcoZ2V0Q3BIYW5kcyhjcEhhbmRzTWFwKSk7CgkJfQoJCWVsc2V7CgkJCVN5c3RlbS5vdXQucHJpbnRsbigi5pyA57WC5Yud6ICF44GM56K65a6a44GX44Gf44Gu44Gn57WC5LqG44GX44G+44GZ44CCIik7CgkJCVN5c3RlbS5leGl0KDApOwoJCX0KCX0KCglwcml2YXRlIHZvaWQgc2hvd1dpbm5lcihpbnQgaGFuZCwgIEhhc2hNYXA8SW50ZWdlciwgSW50ZWdlcj4gY3BIYW5kc01hcCl7CgkJU3RyaW5nQnVmZmVyIHNiV2lubmVyID0gbmV3IFN0cmluZ0J1ZmZlcigi5Yud44Gj44Gf44Gu44Gv44CBIik7CgoJCWZvcihNYXAuRW50cnk8SW50ZWdlciwgSW50ZWdlcj4gZW50cnkgOiBjcEhhbmRzTWFwLmVudHJ5U2V0KCkpewoJCQlpbnQgY3BIYW5kID0gKEludGVnZXIpZW50cnkuZ2V0VmFsdWUoKTsKCQkJaWYoY3BIYW5kID09IGhhbmQpewoJCQkJc2JXaW5uZXIuYXBwZW5kKCIg44Kz44Oz44OU44Ol44O844K/IiArIGVudHJ5LmdldEtleSgpKTsKCQkJfQoJCX0KCgkJU3lzdGVtLm91dC5wcmludGxuKHNiV2lubmVyICsgIuOBp+OBmeOAgiIpOwoJfQoKCXByaXZhdGUgdm9pZCByZW1vdmVDcEhhbmRzKGludCBoYW5kLCAgSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBjcEhhbmRzTWFwKXsKCQlBcnJheUxpc3Q8SW50ZWdlcj4gcmVtb3ZlTGlzdCA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKCgkJZm9yKE1hcC5FbnRyeTxJbnRlZ2VyLCBJbnRlZ2VyPiBlbnRyeSA6IGNwSGFuZHNNYXAuZW50cnlTZXQoKSl7CgkJCWlmKGVudHJ5LmdldFZhbHVlKCkgPT0gaGFuZCl7CgkJCQlyZW1vdmVMaXN0LmFkZChlbnRyeS5nZXRLZXkoKSk7CgkJCX0KCQl9CgoJCWZvcihpbnQgaT0wOyBpIDwgcmVtb3ZlTGlzdC5zaXplKCk7IGkrKyl7CgkJCWNwSGFuZHNNYXAucmVtb3ZlKHJlbW92ZUxpc3QuZ2V0KGkpKTsKCQl9Cgl9CgoJcHJpdmF0ZSBib29sZWFuIGlzQWxsSGFuZEtpbmQoSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBjcEhhbmRzTWFwKXsKCQlmb3IgKEhhbmRzRW51bSBoYW5kc0VudW0gOiBIYW5kc0VudW0udmFsdWVzKCkpIHsKCQkJaWYoIWNwSGFuZHNNYXAuY29udGFpbnNWYWx1ZShoYW5kc0VudW0uZ2V0TnVtKCkpKXsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCX0KCgkJcmV0dXJuIHRydWU7Cgl9CgoJcHJpdmF0ZSBpbnRbXSBnZXRDcEhhbmRLaW5kKCBIYXNoTWFwPEludGVnZXIsIEludGVnZXI+IGNwSGFuZHNNYXApewoJCWludCBnYW1lSGFuZHNbXSA9IG5ldyBpbnRbMl07CgkJaW50IGk9MDsKCgkJZm9yIChIYW5kc0VudW0gaGFuZHNFbnVtIDogSGFuZHNFbnVtLnZhbHVlcygpKSB7CgkJCWlmKGNwSGFuZHNNYXAuY29udGFpbnNWYWx1ZShoYW5kc0VudW0uZ2V0TnVtKCkpKXsKCQkJCWdhbWVIYW5kc1tpXSA9IGhhbmRzRW51bS5nZXROdW0oKTsKCQkJCWkrKzsKCQkJfQoJCX0KCgkJcmV0dXJuIGdhbWVIYW5kczsKCX0KCglwcml2YXRlIGludCBnZXRDcHVDb3VudCgpewoJCVN5c3RlbS5vdXQucHJpbnRsbigi44Kz44Oz44OU44Ol44O844K/44Gu5Lq65pWw44KS5YWl5Yqb44GX44Gm5LiL44GV44GE44CCKDnkurrku6XlhoUpIik7CgkJU3RyaW5nIGNwdUNvdW50ID0gc2Nhbi5uZXh0TGluZSgpOwoKCQlpZiAoIWNwdUNvdW50Lm1hdGNoZXMoIlsyLTldIikpewoJCQlTeXN0ZW0ub3V0LnByaW50bG4oIjLjgYvjgok544G+44Gn44Gu5pWw5a2X44KS5YWl5Yqb44GX44Gm5LiL44GV44GE44CC57WC5LqG44GX44G+44GZ44CCIik7CgkJCVN5c3RlbS5leGl0KDEpOwoJCX0KCgkJcmV0dXJuIEludGVnZXIucGFyc2VJbnQoY3B1Q291bnQpOwoJfQoKCXByaXZhdGUgPEU+IEhhc2hNYXA8SW50ZWdlcixJbnRlZ2VyPiBnZXRDcEhhbmRzKEUgY3B1KXsKCQlSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbSgpOwoJCUhhc2hNYXA8SW50ZWdlcixJbnRlZ2VyPiBjcEhhbmRzTWFwID0gbmV3IEhhc2hNYXA8SW50ZWdlcixJbnRlZ2VyPigpOwoKCQlpZihjcHUgaW5zdGFuY2VvZiBJbnRlZ2VyKXsKCQkJaW50IGNwdUNvdW50ID0gKEludGVnZXIpY3B1OwoJIAkJZm9yKGludCBpPTA7IGkgPCBjcHVDb3VudDsgaSsrKXsKCSAJCQlpbnQgY3BIYW5kTnVtID0gcmFuZG9tLm5leHRJbnQoMyk7CgkJCQlTdHJpbmcgY3BIYW5kID0gSGFuZHNFbnVtLmdldEVudW1CeU51bShjcEhhbmROdW0pLnRvU3RyaW5nKCk7CgkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIuOCs+ODs+ODlOODpeODvOOCvyIgKyBpICsgIuOBryIgKyBjcEhhbmQgKyAi44Gn44GZ44CCIik7CgoJCQkJY3BIYW5kc01hcC5wdXQoaSwgY3BIYW5kTnVtKTsKCQkJfQoJCX0KCgkJaWYoY3B1IGluc3RhbmNlb2YgSGFzaE1hcCl7CgkJCWNwSGFuZHNNYXAgPSAoSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPikgY3B1OwoJCQlmb3IoTWFwLkVudHJ5PEludGVnZXIsIEludGVnZXI+IGVudHJ5IDogY3BIYW5kc01hcC5lbnRyeVNldCgpKXsKCSAJCQlpbnQgY3BIYW5kTnVtID0gcmFuZG9tLm5leHRJbnQoMyk7CgkJCQlTdHJpbmcgY3BIYW5kID0gSGFuZHNFbnVtLmdldEVudW1CeU51bShjcEhhbmROdW0pLnRvU3RyaW5nKCk7CgkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIuOCs+ODs+ODlOODpeODvOOCvyIgKyBlbnRyeS5nZXRLZXkoKSArICLjga8iICsgY3BIYW5kICsgIuOBp+OBmeOAgiIpOwoKCQkJCWVudHJ5LnNldFZhbHVlKGNwSGFuZE51bSk7CgkJCX0KCQl9CgogCQlyZXR1cm4gY3BIYW5kc01hcDsKCX0KCglwcml2YXRlIGVudW0gSGFuZHNFbnVtIHsKCQlHT08oIuOCsOODvCIsIDApLAoJCVRZT0tJKCLjg4Hjg6fjgq0iLCAxKSwKCQlQQUEoIuODkeODvCIsIDIpLAoJCTsKCgkJcHJpdmF0ZSBTdHJpbmcgbmFtZTsKCQlwcml2YXRlIGludCBudW07CgoJCXByaXZhdGUgSGFuZHNFbnVtKFN0cmluZyBuYW1lLCBpbnQgbnVtKSB7CgkJCXRoaXMubmFtZSA9IG5hbWU7CgkJCXRoaXMubnVtID0gbnVtOwoJCX0KCgkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKCQkJcmV0dXJuIG5hbWU7CgkJfQoKCQlwdWJsaWMgaW50IGdldE51bSgpIHsKCQkJcmV0dXJuIG51bTsKCQl9CgoJCXB1YmxpYyBzdGF0aWMgSGFuZHNFbnVtIGdldEVudW1CeU51bShpbnQgbnVtKSB7CgkJCWZvciAoSGFuZHNFbnVtIGhhbmRzRW51bSA6IEhhbmRzRW51bS52YWx1ZXMoKSkgewoJCQkJaWYgKGhhbmRzRW51bS5nZXROdW0oKSA9PSBudW0pIHsKCQkJCQlyZXR1cm4gaGFuZHNFbnVtOwoJCQkJfQoJCQl9CgkJCXJldHVybiBudWxsOwoJCX0KCX0KfQo=