代码中怎么避免if else啊 在开发中 if else 实在是多啊 刚敲完代码,看了下 又发现N多个 if else啊 希望大家给个好的建议啊。 有段时间没发帖了,顺便散点分、、、 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 use pattern, such as chain of responsibility 1、能用条件三元运算符的时候尽量用,但是业务逻辑可能会看不清晰2、能用switch的时候尽量用3、多用if{ return; }...if{ return; }...结构,或者while(true) { if { break; }...if { break; }...break; }结构(用于不方便退出整个方法的时候,但有死循环风险,代码习惯好的可以用),分支条件清晰,多层嵌套if...else...最容易犯错误4、尽量分拆方法,让if...else...里面只有一句方法调用,逻辑也清晰目前采用的就这么多,楼主可以参考一下。 使用switch或者enum,如果项目很大或者涉及到系统的合理性来说,使用设计模式也是很不错的选择,比如说责任链设计模式:http://4ujava.javaeye.com/blog/547166 逻辑重要,没有办法的事情 if()else if() 是swing还是web哦.... 如果想把所有的if else逻辑都提取出来,可以考虑用规则引擎iLog,drools这些就是来把复杂的业务逻辑通过配置文件的方式提取出来,以后改甚至加新的业务逻辑不用更改代码了,改配置文件即可 不用if else的话就只能用if return…… 我知道的避免ifelse的方法:第一种是表驱动法:就是一开始就把所有的可能的数据都存放起来第二种是用状态/策略模式具体采取什么办法,就是看你要实现的功能了.... 一般的话,多用while 来代替if 语句,尤其是当有很多if 语句的时候if语句相对while 语句来看,存在一定的缺陷..所以建议考虑多使用while语句. if else 很常用啊,为什么要不用if else呢? 总是要做布尔运算的么如果说,因为if else 很多,可以考虑用 监听者 模式, 把逻辑判断放到若干个监听者里,每个监听者处理一种情况,有数据进来就给所有的监听者,直到有人处理为止本质上还是要用if else关键看你的目的了 how are UHow old are U 用 a?b:c 的格式,功能相当于if-else,格式上简单一些,推荐~~ 用switch,不过java的switch好像只支持int和char还有可以用离散数学里的关系运算把条件化简或结合 责任链设计模式是不是把if else封装起来了,不是太明白,呵呵,初学。还有头像很不错。 如果怕if else嵌套多了会混乱,除了用模式这些方法外,我觉得可以把条件里的逻辑写成一个个小的private方法,如下: if (a) { doA(); } else if (b) { doB(); } else { doC(); } doA() {} doB() {} doC() {}这样看上去思路会稍微清晰一点,希望对你有帮助。Good Luck! 就是看的有点烦啊 if else if if else 感觉这样写代码和在学校还是一样的 看起来就是不爽啊 不用 if else 我可能就不会写程序了 以论坛帖子为例子,如ForumMessage是一个模型,但是实际中帖子分两种性质:主题贴(第一个根贴)和回帖(回以前帖子的帖子),这里有一个朴素的解决方案:建立一个ForumMessage,然后在ForumMessage加入isTopic这样判断语句,注意,你这里一个简单属性的判断引入,可能导致你的程序其他地方到处存在if else 的判断。 如果我们改用另外一种分析实现思路,以对象化概念看待,实际中有主题贴和回帖,就是两种对象,但是这两种对象大部分是一致的,因此,我将ForumMessage设为表达主题贴;然后创建一个继承ForumMessage的子类ForumMessageReply作为回帖,这样,我在程序地方,如Service中,我已经确定这个Model是回帖了,我就直接下溯为ForumMessageReply即可,这个有点类似向Collection放入对象和取出时的强制类型转换。通过这个手段我消灭了以后程序中if else的判断语句出现可能。 如何是具體的值,可以用swith(){ case://..... break;}代替 将if else用在小地方还可以,如简单的数值判断;在实现业务功能时一般使用设计模式解决。如果你做了不少系统,很久没有使用if else了,那么说明你可能真正进入OO设计的境地了。 纯属个人习惯问题,在写代码的时候,把IF ELSE 对齐就没这问题了 曾经听人说过,如果你的代码中,有很多的if...else的话,说明你的代码面向对象不好!或许是认识肤浅吧,我还是认为if和else都是逻辑判断必须的!楼上有几位兄弟说的,用switch替换,个人和if一样的!没有什么本质的区别! 你可以贴段你的代码出来让大家给你优化下 实际上有些时候由于条件的重复判断的确会出现很多该死的if else组合 写的时候就那么写吧 当你写完的时候我希望你能换个角度 看看自己写的这段代码严谨不严谨 在项目中是的少用点if else但是有时得用还是用点。逻辑问题的时候。但是可以使用设计模式试试规划下。最主要的是要结构清晰。 是啊 代码写了几年了啊 工作2年了啊 可发现代码还是if else啊 看起来很不爽 啊 气愤啊 大家有好的方法再说说吧 分可以再加的 善于用return;一些if语句可以不需要else。一些if语句 判断完成立,可直接返回,无需向下走。其实if else 是别的语言无可替代的,你有时候还必须得用。我记得switch case 好像只能用int类型作为参数的? int 和 char 能用switch的时候不用if...else啊,效率高些嘛! 不建议使用过多的if else ,switch. 因为可扩展性差,而且难维护.可以尝试用多态 package com.csdn;interface Animal { void speak();}class Dog implements Animal { @Override public void speak() { System.out.println("dog speak."); }}class Cat implements Animal { @Override public void speak() { System.out.println("cat speak."); }}class Pig implements Animal { @Override public void speak() { System.out.println("pig speak."); }}public class NoIfElse { // 比方说现在有个需求, // 通过state状态来判断那种动物叫 // 0让狗叫,1让猫叫,2让猪叫 /** * 方法1 */ private void animalSpeak(int state) { Animal[] animals = { new Dog(), new Cat(), new Pig() }; animals[state].speak(); } /** * 方法2,没有用到Animal接口 */ private void animalSpeak2(int state) { if (state == 0) { new Dog().speak(); } if (state == 1) { new Cat().speak(); } if (state == 2) { new Pig().speak(); } } public static void main(String[] args) { NoIfElse t = new NoIfElse(); int state = 1; t.animalSpeak(state); t.animalSpeak2(state); }}LZ比较下方法1和方法2 条件判断无法避免的, 充其量只是换下形式而已.!if else 无所谓.! 但是尽量不要嵌套, 嵌套多了把你自己都套晕了的LS的说的if return是个比较好避免嵌套的解决方案! 设计模式: switch 用Adapter设计模式 太多if else的情况,用三目运算符很难阅读 能用条件三元运算符用switch 我是来学习的,if else过多,就用些return,和switch吧。 if () { if () { if () { }else {} }else { }}解决:写一个方法:public static Integer isArrBoolean(boolean[] bs){ Integer flag = 0; for(int i=0;i<bs.length;i++) { if (!bs[i]) break; flag++; } return flag;}程序中调用:boolean b1 = Utils.toNa(map.get("opId")) >0;boolean b2 = Utils.toNa(map.get("roleId")) >0;boolean b3 = Utils.toNa(map.get("topId")) >0;boolean[] bs = {b1,b2,b3};int flag = Utils.isArrBoolean(bs);switch (flag) { case 1: sb.append(" and m.operator.opId =").append((Integer)(map.get("opId")));break; case 2: sb.append(" and (m.role.roleId =").append((Integer)(map.get("roleId"))); sb.append(" or m.operator.opId =").append((Integer)(map.get("opId"))).append(")"); break; case 3: sb.append(" and (m.role.roleId =").append((Integer)(map.get("roleId"))); sb.append(" or m.toOper.opId =").append((Integer)(map.get("topId"))); sb.append(" or m.operator.opId =").append((Integer)(map.get("opId"))).append(")"); break; default: break;} 数据库驱动程序注册的写法问题 求一个关于运算符的算法--满分200 【求助】JPanel中添加JLable组件不显示的问题 连接access的一个小问题 help me,寻找新版的jxl.jar 求助:如何计算某月份的最后一天是几号? 谁能给我关于jxl的文档 myeclipse如何配置tomcat服务器 求助一个java socket传输问题。 关于AWT的dialog 求大神帮忙编一个初级java(内附题目) Exception in thread "main" java.lang.OutOfMemoryError: Java heap space,怎么办
第一种是表驱动法:就是一开始就把所有的可能的数据都存放起来
第二种是用状态/策略模式
具体采取什么办法,就是看你要实现的功能了....
如果说,因为if else 很多,可以考虑用 监听者 模式, 把逻辑判断放到若干个监听者里,每个监听者处理一种情况,有数据进来就给所有的监听者,直到有人处理为止本质上还是要用if else关键看你的目的了
How old are U
doB() {}
doC() {}这样看上去思路会稍微清晰一点,希望对你有帮助。Good Luck!
if else if if else 感觉这样写代码和在学校还是一样的
看起来就是不爽啊
建立一个ForumMessage,然后在ForumMessage加入isTopic这样判断语句,注意,你这里一个简单属性的判断引入,可能导致你的程序其他地方到处存在if else 的判断。
如果我们改用另外一种分析实现思路,以对象化概念看待,实际中有主题贴和回帖,就是两种对象,但是这两种对象大部分是一致的,因此,我将ForumMessage设为表达主题贴;然后创建一个继承ForumMessage的子类ForumMessageReply作为回帖,这样,我在程序地方,如Service中,我已经确定这个Model是回帖了,我就直接下溯为ForumMessageReply即可,这个有点类似向Collection放入对象和取出时的强制类型转换。通过这个手段我消灭了以后程序中if else的判断语句出现可能。
//.....
break;}
代替
是啊 代码写了几年了啊 工作2年了啊 可发现代码还是if else啊 看起来很不爽 啊
气愤啊 大家有好的方法再说说吧 分可以再加的
一些if语句可以不需要else。一些if语句 判断完成立,可直接返回,无需向下走。
其实if else 是别的语言无可替代的,你有时候还必须得用。
我记得switch case 好像只能用int类型作为参数的?
void speak();
}class Dog implements Animal {
@Override
public void speak() {
System.out.println("dog speak.");
}
}class Cat implements Animal {
@Override
public void speak() {
System.out.println("cat speak.");
}
}class Pig implements Animal {
@Override
public void speak() {
System.out.println("pig speak.");
}
}public class NoIfElse {
// 比方说现在有个需求,
// 通过state状态来判断那种动物叫
// 0让狗叫,1让猫叫,2让猪叫 /**
* 方法1
*/
private void animalSpeak(int state) {
Animal[] animals = { new Dog(), new Cat(), new Pig() };
animals[state].speak();
} /**
* 方法2,没有用到Animal接口
*/
private void animalSpeak2(int state) {
if (state == 0) {
new Dog().speak();
}
if (state == 1) {
new Cat().speak();
}
if (state == 2) {
new Pig().speak();
}
} public static void main(String[] args) {
NoIfElse t = new NoIfElse();
int state = 1; t.animalSpeak(state); t.animalSpeak2(state);
}
}LZ比较下方法1和方法2
if else 无所谓.! 但是尽量不要嵌套, 嵌套多了把你自己都套晕了的
LS的说的if return是个比较好避免嵌套的解决方案!
switch 用Adapter
设计模式
用switch
if () {
if () {
}else {}
}else {
}
}解决:
写一个方法:
public static Integer isArrBoolean(boolean[] bs){
Integer flag = 0;
for(int i=0;i<bs.length;i++) {
if (!bs[i]) break;
flag++;
}
return flag;
}程序中调用:
boolean b1 = Utils.toNa(map.get("opId")) >0;
boolean b2 = Utils.toNa(map.get("roleId")) >0;
boolean b3 = Utils.toNa(map.get("topId")) >0;
boolean[] bs = {b1,b2,b3};
int flag = Utils.isArrBoolean(bs);switch (flag) {
case 1: sb.append(" and m.operator.opId =").append((Integer)(map.get("opId")));break;
case 2: sb.append(" and (m.role.roleId =").append((Integer)(map.get("roleId")));
sb.append(" or m.operator.opId =").append((Integer)(map.get("opId"))).append(")");
break;
case 3: sb.append(" and (m.role.roleId =").append((Integer)(map.get("roleId")));
sb.append(" or m.toOper.opId =").append((Integer)(map.get("topId")));
sb.append(" or m.operator.opId =").append((Integer)(map.get("opId"))).append(")");
break;
default: break;
}