在开发过程中,难免碰到很多需要判断的属性,比如大家经常玩的麻将,就可能需要对胡牌类型进行判断,例如“大三元”、“大四喜”、“十三幺”等牌型。
正常情况下,我们可能会根据每种牌型都写一个判断方法,那么就出现了一个很严重的问题:国际麻将中近百种牌型,我们是否需要判断近百次?也许可以进行一些特殊判断再进入具体判断:例如判断是否都是顺子?那么可以排除一些例如“清幺九”、“清碰”等牌型。但是具体实现起来也是一个不得了的判断过程,所以我们可以使用枚举来进行做方法判断,最终提供给接口那边的应该只有一个判断。

直接上代码:

/*** 特殊牌型判断之混幺九* @param tiles* @return*/public static MahJongWinOfTypeEnum hunYaoJiu(List<Tiles>tiles) {int[]arr=Common.TilesToArrayInt(tiles);for (int i = 0; i < arr.length; i++) {if(arr[i]%10!=9&&arr[i]%10!=1&&arr[i]<40) {return null;}}return MahJongWinOfTypeEnum.hunYaoJiu;     }/*** 特殊牌型判断之清一色* @param tiles* @return*/public static MahJongWinOfTypeEnum qingYiSe(List<Tiles>tiles) {for (int i = 0; i < tiles.size()-1; i++) {if(!tiles.get(i).getTilesType().equals(tiles.get(i+1).getTilesType())) {return null;}}return MahJongWinOfTypeEnum.qingYiSe;    }

假设我们写了一些牌型判断方法(注意:只是参考代码,不为实现需求),如果是使用if判断,那么最终的代码可能是这样:

/*   if(hunYaoJiu(tiles)!=null) {return hunYaoJiu(tiles);}if(qingYiSe(tiles)!=null) {return qingYaoJiu(tiles);}.......*/

或许需要判断近百次?这种代码不要说项目经理,就是我们自己应该也是看不下去的。那么就可以用上枚举来进行解决了。

我们先创建一个枚举:

public enum verdictWinTilesTypeEnum {}

我们在枚举中定义属性值:

qingYaoJiu{public  MahJongWinOfTypeEnum getTilesType(List<Tiles>tiles){return TilesTypeJudgment.qingYaoJiu(tiles);};},qingYiSe{public  MahJongWinOfTypeEnum getTilesType(List<Tiles>tiles){return TilesTypeJudgment.qingYiSe(tiles);};}; public MahJongWinOfTypeEnum getTilesType(List<Tiles>tiles) {return null;}

定义枚举属性大家应该不陌生,我们在属性内部定义一个public的getTilesTye方法,每个属性内部的方法分别调用对应的处理方法。

下面就是枚举内部的遍历处理:

/*** 判断赢牌的最终牌型* @param tiles* @return*/public static MahJongWinOfTypeEnum verdictWinTilesType(List<Tiles>tiles) {for (verdictWinTilesTypeEnum e : verdictWinTilesTypeEnum.values()) {if(e.getTilesType(tiles)!=null) {return e.getTilesType(tiles);}}return null;       }

那么最终展示在接口的调用方法,其实只需要:

if(verdictWinTilesTypeEnum.verdictWinTilesType(tiles)!=null) {/*for (Tiles t : tiles) {System.err.println(t.getTilesId());}*/}

这样就完美解决了使用过多的if判断处理。

使用枚举优雅解决过多方法验证的问题,避免使用过多的if相关推荐

  1. ajax返回一直进入error_解决ajax返回验证的时候总是弹出error错误的方法

    这篇文章主要介绍了解决ajax返回验证的时候总是弹出error错误的方法,感兴趣的小伙伴们可以参考一下 发一个简单案例: 前台: 用户登录 $(function(){ var loginDialog; ...

  2. 网站出现403 Forbidden错误的原因以及怎么解决的方法

    这几天刚接手一批新做的网站,在访问网站的时候,会时不时的出现403 Forbidden错误,浏览器会给出403 Forbidden错误提示,在打开Access Error中列出的URL之后, 出现以下 ...

  3. 浏览器禁用Cookie,基于Cookie的会话跟踪机制失效的解决的方法

    当浏览器禁用Cookies时.基于Cookie的会话跟踪机制就会失效.解决的方法是利用URL重写机制跟踪用户会话. 在使用URL重写机制的时候须要注意.为了保证会话跟踪的正确性,全部的链接和重定向语句 ...

  4. 无法创建文件夹或文件问题的解决的方法

     问题现象:我们的软件执行在Windows server 2003系统上,软件是一个接受文件软件,将接受的文件存于一个目录下,当执行到一定的时候,大概目录下有10w个文件的时候,就弹出"无法 ...

  5. 使用Maple进行c语言程序修复,Gro¨ bner基方法验证乘法器的Maple实现

    1. 引言 乘法器电路是计算机系统.信号处理.密码系统.机器学习等众多现代数字电路系统中的重要组成部分,对其正确性进行验证是必不可少的一个环节 [1].传统的模拟仿真技术与形式化验证方法是乘法器电路验 ...

  6. cadence SPB17.4 - allegro - CAM350_V10.7CN 引入槽孔(.rou)文件报错问题的优雅解决思路

    cadence SPB17.4 - allegro - CAM350_V10.7CN 引入槽孔(.rou)文件报错问题的优雅解决思路 文章目录 cadence SPB17.4 - allegro - ...

  7. 摩尔庄园手游服务器链接不稳定,摩尔庄园手游排队进不去 解决排队方法介绍...

    摩尔庄园手游是一款经典的3D社区养成手游,在这款游戏中我们会偶尔遇到排队进入游戏的情况,那么摩尔庄园手游排队进不去该怎么办呢?下面我们就一起来看一下摩尔庄园手游解决排队的方法介绍吧. 一.解决排队方法 ...

  8. 构造原理中的独立性条件如果不满足,是否原结论仍然成立?试用模拟的方法验证你的结论。

    以下博客解决: 构造原理中的独立性条件如果不满足,是否原结论仍然成立?试用模拟的方法验证你的结论. 构造原理中的独立性条件如果不满足,则原结论不成立. X 1 X_{1} X1​

  9. iOS 把数据库文件打包到mainbundle中,查找不到路径的解决的方法;以及在删除bundle中文件的可行性...

    在开发中有时我们须要把数据库文件打包到我们的项目中.一般我们都是在外部用工具生成数据库文件,然后拉入项目中.可是我们在程序中查找改文件时.返回的路径总是nil 解决的方法: 原因我们拉入其它资源文件( ...

最新文章

  1. 利用stdin stdout stderr及POSIX-linux机制重定向写日志
  2. 在线作图|2分钟绘制三维PCA图
  3. wap开发中取到真实的手机号码
  4. my-large.cnf
  5. Windows下静态链接库的使用
  6. PWN-PRACTICE-BUUCTF-5
  7. c语言第五章137页题目及答案,(完整版)C语言程序设计教程第五章练习题题目
  8. css设置table阴影浮动效果
  9. c语言程序设计 ncre,全国计算机二级C语言程序设计题((100%全中必过).doc
  10. 计算机提示应用程序无法启动,告诉你电脑提示应用程序无法正常启动0x000007b怎么办...
  11. triggered传递参数
  12. 疯狂动物城简介第一台通用计算机,疯狂动物城 简介
  13. 怎样下载苹果 Apple Store 官方 APP 里的限时免费应用福利?
  14. CSS 哀悼日 网页全灰效果
  15. LaTex支持中文的三种方式
  16. 最新ie图标变灰css,css+js整站变灰(兼容IE7+)
  17. 玩游戏计算机虚拟内存怎么设置,玩游戏时提示虚拟内存太小怎么办
  18. Kotlin第五章: android网络编程
  19. WEB前端 | HTML基础——(5)表格和表单
  20. CSDN的博客,一声叹息

热门文章

  1. ssr提示服务器名无效_今日更新干货:服务器扩容缓解排队
  2. python两个乘号什么意思_python乘号_python 乘号_python的乘号 - 云+社区 - 腾讯云
  3. Excel字符串截取
  4. 零信任在某省政务大数据智能项目的落地实践
  5. 跟我一起认识基础的元器件 Part1
  6. 网站配置 ip+端口 访问外网
  7. 区块链游戏和元宇宙的关系
  8. 啊哈,算法自学记——6th
  9. 从人工智能到人工心灵
  10. Live800:在线客服系统哪家强?