-
2017-08-06 14:03:09
有下面代码:
if(status="0"){ text="a"; }else if(status="1"){ text="b" }else if(status="2"){ text="c" }
可以写出下面这样子:
switch(status){ case ‘0’: text="a"; break; case '1': text="b"; break; case '2': text = "c"; break; }
最好的方法是下面的样子:
设置一个数组 arr[]={"a", "b", "c"} for(int i =0;i<arr.length;i++){ text =arr[i] }
Reference:
http://blog.csdn.net/sameen916/article/details/50860777更多相关内容 -
如何优化代码中的多重if
2021-03-22 11:25:24原文:https://www.baeldung.com/java-replace-if-statements1.利用工厂模式/*** 通过工厂模式来代替if* */public class RelIfByFactory {public static void main(String[] args) {System.out.println(calculate(3,...原文:https://www.baeldung.com/java-replace-if-statements
1.利用工厂模式
/**
* 通过工厂模式来代替if
* */
public class RelIfByFactory {
public static void main(String[] args) {
System.out.println(calculate(3,6));
}
private static int calculate(int a, int b) {
// TODO Auto-generated method stub
Operation operation = OperatorFactory.getOperation("add")
.orElseThrow(()->new RuntimeException("参数非法"));
return operation.apply(a, b);
}
}
interface Operation{
int apply(int a,int b);
}
class Addition implements Operation{
@Override
public int apply(int a, int b) {
// TODO Auto-generated method stub
return a+b;
}
}
class OperatorFactory{
static Map operMap = new HashMap();
static {
operMap.put("add", new Addition());
}
static Optional getOperation(String operator){
return Optional.ofNullable(operMap.get(operator));
}
}
2.利用枚举类
package releaseif;
/**
* 通过枚举类来代替多重if
*/
public class RelIfByEnums {
public static void main(String[] args) {
System.out.println(calculate(9, 3, Operator.valueOf("DIVIDE")));
}
private static int calculate(int a, int b, Operator operator) {
// TODO Auto-generated method stub
return operator.apply(a, b);
}
}
enum Operator {
ADD {
@Override
public int apply(int a, int b) {
return a + b;
}
},
MULTIPLY {
@Override
public int apply(int a, int b) {
return a * b;
}
},
SUBTRACT {
@Override
public int apply(int a, int b) {
return a - b;
}
},
DIVIDE {
@Override
public int apply(int a, int b) {
return a / b;
}
};
public abstract int apply(int a, int b);
}
3.通过命令模式
package releaseif;
/**
* 通过命令模式代替多重if
*/
public class RelIfByCommand {
public static void main(String[] args) {
System.out.println(calculate(new AddCommand(5, 8)));
}
private static int calculate(AddCommand command) {
// TODO Auto-generated method stub
return command.execute();
}
}
interface Command {
int execute();
}
class AddCommand implements Command {
int a;
int b;
public AddCommand(int a, int b) {
super();
this.a = a;
this.b = b;
}
@Override
public int execute() {
// TODO Auto-generated method stub
return a + b;
}
}
4.利用规则引擎
package releaseif;
import java.util.ArrayList;
import java.util.List;
/**
* 通过规则引擎代替多重if
*/
public class RelIfByRuleEngine {
public static void main(String[] args) {
Expression expression = new Expression(5, 7, Operator.ADD);
System.out.println(new RuleEngine().process(expression).getValue());
}
}
class Result {
int value;
public Result(int value) {
super();
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
class RuleEngine {
static List rules = new ArrayList();
static {
rules.add(new AddRule());
}
Result process(Expression expression) {
Rule rule = rules.stream().filter(r -> r.evaluate(expression)).findFirst()
.orElseThrow(() -> new RuntimeException("error"));
return rule.getResult();
}
}
interface Rule {
boolean evaluate(Expression expression);
Result getResult();
}
class Expression {
private int x;
private int y;
private Operator operator;
public Expression(int i, int j, Operator operator) {
// TODO Auto-generated constructor stub
this.x = i;
this.y = j;
this.operator = operator;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Operator getOperator() {
return operator;
}
public void setOperator(Operator operator) {
this.operator = operator;
}
}
class AddRule implements Rule {
int result;
@Override
public boolean evaluate(Expression expression) {
// TODO Auto-generated method stub
var evalResult = false;
if (expression.getOperator() == Operator.ADD) {
result = expression.getX() + expression.getY();
evalResult = true;
}
return evalResult;
}
@Override
public Result getResult() {
// TODO Auto-generated method stub
return new Result(result);
}
}
-
多重判断条件IF优化
2020-05-07 17:00:36IF多重条件逻辑优化事例一:比较简单的if逻辑嵌套事例二:复杂场景的if逻辑嵌套代码抽象:递进式的条件及对应的业务处理总结 含义: c1:条件1,值为true c2:条件2,值为true c3:条件3,值为true 事例一:比较...IF多重条件逻辑优化
含义:- c1:条件1,值为true
- c2:条件2,值为true
- c3:条件3,值为true
事例一:比较简单的if逻辑嵌套
代码抽象:递进式的条件
// 方法开始 ... if (c1) { if (c2) { if (c3) { // 业务逻辑 } } } // 方法结束
优化后的代码逻辑:
// 方法开始 ... if (!c1) { return; } if (!c2) { return; } // 业务逻辑处理 // 方法结束
事例二:复杂场景的if逻辑嵌套
代码抽象:递进式的条件及对应的业务处理
// 方法开始 ... ... if (c1) { // 业务逻辑一 if (c2) { // 业务逻辑二 if (c3) { // 业务逻辑三 } // 业务逻辑四 } // 业务逻辑五 } // 业务逻辑六 // 方法结束
优化后的代码逻辑:
// 业务逻辑抽取独立的方法 m1() { // 业务逻辑一 } m2() { // 业务逻辑二 } m3() { // 业务逻辑三 } m4() { // 业务逻辑四 } m5() { // 业务逻辑五 } m6() { // 业务逻辑六 } // 重构的方法内部开始 ... ... if (!c1) { m6(); return; } m1(); if (!c2) { m5(); m6(); return; } m2(); if (c3) { m3(); m4(); m5(); m6(); return; } m4(); m5(); m6(); // 方法结束
事例三:并列下IF条件逻辑表达式固定的优化
事例:
if (param.equals(val1)) { doAction1(someParams); } else if (param.equals(val2)) { doAction2(someParams); } else if (param.equals(val3)) { doAction3(someParams); }
用表驱动来优化,这个基于表驱动的方式来优化if-else逻辑在Spring中的应用场景很常见,比如NamespaceHandler中注册各种BeanDefinitionParser。Spring的表驱动方式是采用了集中注册的方式,在NamespaceHandlerSupport中。
// 创建值跟动作的映射表 Map<?, Function<?> action> actionMappings = new HashMap<>(); // 存放映射关系 actionMappings.put(val1, (someParams) -> doAction1(someParams)); actionMappings.put(val2, (someParams) -> doAction2(someParams)); actionMappings.put(val3, (someParams) -> doAction3(someParams)); // 获取对应的Funtion,并将someParams入参传到对应的Function中去,省略为null的判断 actionMappings.get(param).apply(someParams);
事例四:if-else中的条件表达式灵活多变
如果if-else中的条件表达式灵活多变,无法进行数据抽象为表格的方式,经常会用责任链设计模式。Spring Web常见的应用是Interceptor机制。
事例五:进行null值判断的if-else条件简化,注解驱动
我们在进行方法传参的时候,经常需要对方法参数作非空判断,可以在方法参数签名中添加@NotNull注解等
事例六:Assert模式【Bean Validation】
事例七:Optional,表示可为空的对象
总结
我们经常不可避免的在代码中写很多的if条件语句,甚至,会形成多重嵌套的if条件结构。掌握IF条件能力,有两点:
- 首先,有递进式的逻辑关系,改成并列式的逻辑关系【取反逻辑】
- 其次,if条件中的业务逻辑处理适当的抽取为独立的方法。
- 在递进式跟并列式的if条件取舍中,还要掌握一个维度,代码简洁。
- if条件个数尽量不要多
- 在事例二中的if(c3)逻辑没有再次取反逻辑,是考虑了这一点,if条件内的是执行几率较少的情况。
-
关于python多重if判断的优化
2022-04-20 19:14:50关于python多重if判断的优化简单多重if条件判断。
代码:num = 5 if num == 3: # 判断num的值 print('boss') elif num == 2: print('user') elif num == 1: print('worker') elif num < 0: # 值小于零时输出 print('error') else: print('roadman') # 条件均不成立时输出
优化代码:
num_dict = { 3:'boss', 2:'user', 1:'worker', 0:'error' } result = num_dict.get(3, 'roadman') print(result)
多重if条件判断之 基于函数判断:
代码:def func_1(int): return int == 3 def func_2(int): return int == 2 def func_3(int): return int == 1 def func_4(int): return int == 0 def func_5(int): return int <0 or int > 3 def if_else_func(int): func_dict_ = { func_1(int):'boss', func_2(int):'user', func_3(int):'worker', func_4(int):'error', func_5(int):'roadman' } for i in func_dict_.keys(): if i: # do something print(func_dict_.get(i)) break # break 与elif 作用相同, 满足其中一个if条件就退出循环 if __name__ == '__main__': if_else_func(4)
上述代码优点在于 判断条件可以传入参数。 判断条件函数可以无限扩展。
如果有更好的方法 欢迎留言 -
java 多重if判断怎么优化
2018-06-25 06:30:17if(id == null || id.isEmpty()){ if(type == null){ if(name==null || name.isEmpty()){ //...select..sql... }else { //...select..sql... } }else { if(name==null || name.isEmpty()){ //...select..sql... }... -
改善丑陋的代码——多重if-else语句优化(卫语句)
2021-12-25 16:40:03小伙伴们大家好,今天给大家介绍使用卫语句的方法来优化代码中的多重if-else语句。 我们开门见山,先来看一段代码: let userAge = 30; let userMajor = "Software Engineering"; let isPassChoose = true; let ... -
php优化if多重嵌套语句
2017-08-03 11:39:44在做公司erp系统的过程中,遇到了一个需求...而本人在编写时由于没想太多大部分用的都是if判断语句来筛选。 最终形成多个if语句嵌套。 if (!isset($factor_divide)) { if($switch_state=='1') -
Java 多重if else 优化 (策略模式+工厂)
2020-09-18 10:46:05if ("轿车".equals(carType)) { System.out.println("轿车"); } else if ("卡车".equals(carType)) { System.out.println("卡车"); } else if ("suv".equals(carType)) { System.out.println("SUV"); } //车... -
记一次多重if判断优化
2020-01-22 11:37:41假如主题名称改了,那你得改32个(当然主题名不可能随意更改)总之这样不利于维护,而且看起来很别扭 在此之前我看过一些关于if优化的博客,大概也就是用策略模式加工厂模式代替 当我看到我对接的kafka的消息中是... -
多重if判断简单优化
2020-01-20 16:48:57一、最笨重的 维护看起来很难受 public class Test { private static String getPrice(String fruit) { if ("梨".equals(fruit)) { return "梨价格"; } else if ("苹果".equals(fruit)) { ... -
java中的多重if
2021-03-13 04:27:47else if块的顺序是连续的,而不是跳跃的,第一个条件之后的所有条件都是在第一个条件不成立的情况下才出现的,反言之就是如果第一个条件满足就不会再继续往下走了!示例:public static void main(String[] args) {int ... -
多重if语句
2021-01-17 16:38:04if-else if-else语句 来一个简单的案例体会体会 需求: 编写一个程序,根据考试成绩,输出相应的评定信息。 成绩大于等于90,输出 优 成绩大于等于80且小于90,输出 良 成绩大于等于60且小于80,输出 中 成绩小于60... -
if 嵌套if 多重if结构
2020-12-13 16:26:55第三章 1,什么是if选择结构? 就相当于造句,如果…就… 2,if选择结构执行的顺序是什么? if选择结构是根据条件判断之后再做处理,条件为真就进入代码块,条件假就...多重if选择结构的语法 if(条件){ //代码块 }el -
流程控制之if、多重if、嵌套
2021-03-04 03:18:581、if-else 选择结构语法:if(条件){}else{}if是java的关键字。表达式是布尔类型的表达式,其结果为true或者false例如:输入一个成绩,如果成绩大于90.奖励import java.util.*;public class if_01 {public static ... -
多重if函数的使用方法
2021-06-15 01:38:51EXCE的IF函数中,多重条件判断怎么用?如示例。1.1若月考核得分高于同区域友商的情况下:考核打分在95分以上,则甲这个函数可以按照下列思路来编写: 首先,若 A1>=1500 且 B1>=5000时,则C1=Z; 否则,若 A1&... -
Nginx实现if多重判断配置方法示例
2020-09-30 15:24:41主要介绍了Nginx实现if多重判断配置方法示例,本文直接给出实现代码,需要的朋友可以参考下 -
Excel多重条件IF语句应用
2020-09-01 23:45:55Excel多重条件IF语句 IF(条件1,值,IF(条件2,值,IF(条件3,值))) IF(条件1,值,IF(条件2,值,其余情况的值)) 通过以上方式可以进行多重条件的嵌套 1.根据前文的数据进行相关操作行人轨迹数据,需要对行人轨迹... -
多重if条件判断峯.png
2021-09-18 15:35:06敲代码报错编程环境配置流程图 -
Java if-else 多重嵌套的优化
2020-01-03 21:15:26文章目录1. if-else 多重嵌套的问题2. 解决方案2.1 使用 Map 缓存2.2 switch 简化条件 1. if-else 多重嵌套的问题 2. 解决方案 2.1 使用 Map 缓存 2.2 switch 简化条件 -
java基础教程301集065 多重if与switch c.mp4
2022-05-18 14:37:28java基础教程301集065 多重if与switch c.mp4 -
多重if-else语句
2019-04-15 17:28:58C语言自学之多重if-else语句 Dome : 某游戏对不同等级的积分的玩家赋予不同的荣誉称号,其对应关系如下: 积分>=10000分为钻石玩家 积分>=5000并且<10000为白金玩家 积分>=1000并且<5000... -
多重if,嵌套if和switch case如何区别使用
2021-02-14 23:16:17多重if,嵌套if和switch case如何区别使用 多重if:多重选择 例子: if() { }else if() { }else if() { } 编写顺序:严格优秀判断。 2. 嵌套if if() { } if() { } if() { } 多重if和嵌套if:判断是否是同一... -
选择结构 —— 多重 if 选择结构
2020-04-11 22:23:263. 多重if选择机构 语法: if (布尔表达式1){ //代码块1 }else if(布尔表达式2){ //代码块2 }else if(布尔表达式3){ // else if 不限次数 //代码块3 }else{ //代码块4 } 后续代码。。。 public class ... -
excel中多重IF函数使用实例
2019-11-14 17:58:59=IF(I2=“A”,E2,IF(I2=“B”,F2,IF(I2=“C”,G2,IF(I2=“D”,H2)))) 判断单元格数据显示另一单元格数据 -
java中Switch与多重if条件结构的区别
2021-01-11 15:18:40switch条件结构样式: switch(表达式){ case 常量1: 语句; break; case常量2: 语句; ...表达式的类型只能是整型(byte、short、int)和...多重if条件结构样式: if(表达式){ 语句; }else if(表达式){ 语句; } -
mysql中if多重判断使用
2020-11-18 11:42:47但是我们的业务通常有好几种状态需要来判断,这时候if两种状态不能满足我们的需求, 因此我们需要使用if嵌套if语句来实现多状态的需求,表达式为IF(expr1,expr2,IF(expr1,expr2,IF(expr1,expr2,expr3))) 业务需求 我... -
Nginx的多重if判断
2019-05-16 18:12:24Nginx中不支持嵌套的if判断,所以使用变量的方式进验证,网上有很多关于这种的方式! server { listen 521; server_name default_server; set $notlogin 0; # 拦截指定页面,~* 是不区分大小写,~ 区分大... -
Java中的多重判断if、else if、else
2020-07-25 19:00:30当我们需要进行多个条件对比的时候需要使用if和else if来进行判断。 题目:根据给出的年龄和性别判断是否可以进入决赛如果进入决赛是男子组还是女子组。判断规则:如果成绩大于80分可以进入决赛。 public static ... -
C++,多重if和switch
2020-09-02 17:38:18多重if if语句的用法: 判断括号中的num是否为5,如果是执行大括号下面的代码,否则直接跳过不执行。 流程图: 需要注意的是 if是由大括号的,也可以省略不写,推荐是写,可以让自己更清晰。这里运行的结果为num = 3... -
if-else嵌套过多时的优化方案
2021-02-02 23:10:36//if-else嵌套过多时的优化方案在垒代码的时候经常会遇到 if-else 的嵌套判断,就是下一个判断依赖于上一个判断的结果,其基本的表现形式为if(){//first judgeif(){//second//do something}else{if(){//third//do ...