因为觉得还是服务器判断和牌比较好。所以把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;
}
}