因为觉得还是服务器判断和牌比较好。所以把flex代码的改成java的了
package util; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import edu.emory.mathcs.backport.java.util.Arrays; //检查是否糊了 public class WithCard { private List<Integer> wan; private List<Integer> tiao; private List<Integer> bing; private List<Integer> feng; public WithCard(){ this.wan=new ArrayList<Integer>(); this.tiao=new ArrayList<Integer>(); this.bing=new ArrayList<Integer>(); this.feng=new ArrayList<Integer>(); } public boolean checkIsHu(String value){ String checkArray[]=value.split(","); parseArrayToList(checkArray); return startCheck(); } private boolean startCheck(){ try { this.checkSingleMah(wan, 1); this.checkSingleMah(tiao, 2); this.checkSingleMah(bing, 3); this.checkSingleMah(feng, 4); } catch (SuccessException e) { System.out.println("糊了"); return true; //e.printStackTrace(); } return false; } //查看单独的一个如wan中取出相同 的看剩余是否能匹配组 private void checkSingleMah(List<Integer> list,int current) throws SuccessException{ //System.out.println("wwww"+list.toString()); Set<Integer> sames=this.serachSame(list); out:for(int i=0;i<sames.size();i++){ List<Integer> newSames=this.getNewList(sames); List<Integer> newList=this.getNewList(list); newList.remove(new Integer(newSames.get(i))); newList.remove(new Integer(newSames.get(i))); newList=this.sortList(newList); System.out.println("newList"+newList.toString()); if(this.checkIsGroup(newList)){ if(checkOtherLever(current)){ throw new SuccessException(); } }else{ if(i==sames.size()-1){ break out; }else{ continue out; } } } } private boolean checkOtherLever(int current) { boolean success=false; switch(current){ case 1:success=this.check(tiao)&&this.check(bing)&&this.check(feng);break; case 2:success=this.check(wan)&&this.check(bing)&&this.check(feng);break; case 3:success=this.check(wan)&&this.check(tiao)&&this.check(feng);break; case 4:success=this.check(wan)&&this.check(tiao)&&this.check(bing);break; } return success; } private boolean check(List<Integer> list){ return this.checkIsGroup(list); } //从list中查找两个相同的数 private Set<Integer> serachSame(List<Integer> list){ // List<Integer> sames=new ArrayList<Integer>(); Set<Integer> sames=new HashSet<Integer>(); Map<Integer,Integer> maps=new HashMap<Integer,Integer>(); for(int i=0;i<list.size();i++){ if(!maps.containsValue(list.get(i))){ maps.put(i, list.get(i)); }else{ sames.add(list.get(i)); } } System.out.println("sames_____"+sames.toString()); return sames; } //检查是否是组 public boolean checkIsGroup(List<Integer> list){ if(list.size()%3!=0){ return false; } if(list.size()==0){ return true; } switch(list.size()){ case 3:return checkIsAgroup(list); case 6:return checkIsTwoGroup(list); case 9:return checkIsThreeGroup(list); case 12:return checkIsFourGroup(list); } return false; } private boolean checkIsThreeGroup(List<Integer> list) { if(this.checkIsAgroup(list)){ // this.splice(0, 3, list); return this.checkIsTwoGroup(list.subList(3, list.size())); }else if(list.get(0)==list.get(1)){ List<Integer> newList=this.getNewList(list); if(!this.checkThreeFirstThing(list.get(0),list)){ List<Integer> six=this.getListByIndex(list,1,3,4,6,7,8); List<Integer> three=this.getListByIndex(list,0,2,5); if(this.checkIsAgroup(three)&&this.checkIsTwoGroup(six)){ return true; } }else{ return true;//这怎么还是true???? } }else if(list.get(0)+1==list.get(1)){ List<Integer> newList=this.getNewList(list); if(!this.checkThreeFirstThing(list.get(1)+1, newList)){ System.out.println("执行了sssssss"); return false; }else{ return true; } }else{ return false; } return false; } private boolean checkThreeFirstThing(int num,List<Integer> list){ List<Integer> newlist=list.subList(2, list.size());//删除前2个元素,查看剩余的值,是否是2组 int index=serachSpecify(num,newlist); //var index:int=serachSpecify(y,arrs);//找到指定值的索引值 if(index!=-1){ //list=list.subList(index, index+2);//因为api中说第2个参数不包含在内,所以+2 //this.splice(index, 1, newlist); newlist.remove(new Integer(newlist.get(index))); System.out.println("checkThreee"+newlist.toString()); return this.checkIsTwoGroup(newlist); //throw new Error(arrs.toString()+"shengxiade shushi "); }else{ return false; } } private int serachSpecify(int num, List<Integer> list) { System.out.println("要查找的书"+num+":"+list.toString()); for(int i=0;i<list.size();i++){ if(list.get(i)==num){ System.out.println(list.get(i)+"查找到得数是"+"index"+i); return i; } } return -1; } private boolean checkIsFourGroup(List<Integer> list) { List<Integer> newList=this.getNewList(list); if(this.checkIsAgroup(list)){ return this.checkIsThreeGroup(newList.subList(3, list.size())); }else{ List<Integer> three; List<Integer> newArray; try { int threeIndex=this.serachSpecify(list.get(2)+1, list); System.out.println(list.get(2)+"bbbbbbbbbbbb"); three = this.getListByIndex(list,0,2,threeIndex); System.out.println(list.get(0)+"___"+list.get(2)+" "+list.get(threeIndex)); System.out.println(list.get(threeIndex)+"getThreeIndex"+threeIndex); newArray = this.getNewList(list); System.out.println(newArray.toString()+"新Array"); this.splice(threeIndex, 1, newArray); this.splice(2, 1, newArray); this.splice(0, 1, newArray); } catch (RuntimeException e) { System.out.println("出错次数"); // e.printStackTrace(); return false; } // System.out.println(newArray.toString()+"删除后Array"); // System.out.println(three+"three__"); return this.checkIsAgroup(three)&&this.checkIsThreeGroup(newArray); } } private boolean checkIsTwoGroup(List<Integer> list) { //现看最简单方式123 456 ,111 444,111 456等组合 if(checkIsAgroup(list)&&isgroupUtil(3,4,5,list)){ return true; }else{ //否则的话 return this.checkIsTwoGroupThing(list); } } //检查是否两组的第2种情况 private boolean checkIsTwoGroupThing(List<Integer> list){ if(isgroupUtil(0,1,3,list)&&this.isgroupUtil(2, 4, 5, list)){ return true; }else if(isgroupUtil(0,2,4,list)&&this.isgroupUtil(1, 3, 5, list)){ return true; }else{ return false; } } private boolean checkIsAgroup(List<Integer> list) { return isgroupUtil(0,1,2,list); } private boolean isgroupUtil(int index,int index2,int index3,List<Integer> list){ if(list.get(index)+1==list.get(index2)&&list.get(index2)+1==list.get(index3)){ return true; }else if(list.get(index)==list.get(index2)&&list.get(index2)==list.get(index3)){ return true; }else{ return false; } } private List<Integer> getListByIndex(List<Integer> list,int ...args){ List<Integer> newList=new ArrayList<Integer>(); for(int i=0;i<args.length;i++){ System.out.println("参数是_________"+args[i]); newList.add(list.get(args[i])); } return newList; } private void parseArrayToList(String[] arr){ for(int i=0;i<arr.length;i++){ initEveryList(Integer.parseInt(arr[i])); } } private void initEveryList(int num){ Integer ac=num/9; switch(ac){ case 0:wan.add(num);break; case 1:tiao.add(num);break; case 2:bing.add(num);break; case 3:feng.add(num);break; } } private List<Integer> getNewList(Collection list){ return new ArrayList(list); } //对list进行排序 private List<Integer> sortList(List<Integer> list){ Integer[] li=new Integer[list.size()]; list.toArray(li); Arrays.sort(li); List<Integer> newList=new ArrayList<Integer>(); for(int i=0;i<li.length;i++){ newList.add(li[i]); } return newList; } //从指定位置删除指定个元素 private void splice(int fromIndex,int count,List<Integer> list){ List<Integer> li=new ArrayList(); for(int i=0;i<count;i++){ li.add(list.get(fromIndex+i)); } //从list中删除指定元素 for(int i=0;i<count;i++){ list.remove(new Integer(li.get(i)));//这有问题原来是list.get(i)应该是li.get(i); } } public static void main(String args[]){ WithCard wc=new WithCard(); System.out.println(wc.checkIsHu("" + "0,1,2," + "3,4,5," + "1,2,3," + "3,4,5," + "5,5")+"hu le??"); //System.out.println(wc.checkIsAgroup(list)) List<Integer> list=new ArrayList<Integer>(); list.add(0); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(1); list.add(2); list.add(3); list.add(5); list.add(5); list.add(5); System.out.println(wc.checkIsGroup(list)+"是否是组"+list.size()); // List l=wc.sortList(list); // System.out.println(l.toString()); // System.out.println(list.toString()); // System.out.println(list.remove(new Integer(2))); // test(list); // System.out.println(list.toString()); } public static void test(List list){ List li=new ArrayList(list); li.remove(0); } class SuccessException extends Exception{ /** * */ private static final long serialVersionUID = -4566456691989778658L; public SuccessException() { super(); } public SuccessException(String arg0) { super(arg0); } @Override public String getMessage() { return super.getMessage(); } } class Same{ int index; int value; } }