JSP JAVA复杂条件判断问题(紧急请教,2天内解决)
问题好像有条件A.B.C.D.E.F
当A满足时B不满足C满足D不满足一个处理.
当A满足时C不满足B满足D不满足一个处理.
当A满足时C不满足D满足B不满足一个处理.
当然条件比这里要复杂很多,就是各种情况互相关联影响.
征求有没有利用java中的数据类型多着迭代之类得方式解决.
完全用IF判断的方式不在考虑之内.
因为用IF写估计至少几百个判断嵌套.
主要是为了效率得考虑.
项目问题真心急求答案,好心高手帮忙吧!
------解决方案--------------------先帮顶一个~~~有头绪了再来帮解决~
------解决方案--------------------我不是高手 只会用迭代读数据。。。。。。迭代判断?????关注ING
LZ是想用容器类保存判断条件(容器类中保存的都是OBJECT类型 使用需要转型)迭代只有3种方法吧 hasNext() next() remove() 好象都不能满足LZ要求
LZ可以修改Iterator类 使它可以完成LZ的需求
LZ完全是为了少写代码的考虑不用IF完全不是效率问题 使用迭代只比IF慢不见得会快
才7个条件就几百个判断嵌套。。。。。。。。
------解决方案--------------------一共六个条件,怎么也不可能上百个判断吧,2的六次方=64
------解决方案--------------------可以把所有的 处理 预先配置在一个HashMap 里面,然后利用6个条件生成唯一的key,然后根据key在HashMap里面获得你想要的 处理.起码这样代码上可以简洁一些.下面是个简单的例子可以参考一下.
import java.util.HashMap;
public class Test {
public static boolean[] a =new boolean[2];
public static void main(String[] arg){
String option= " ";
a[0] = true;
a[1] = true;
HashMap actions = new HashMap();
actions.put( "00 ", "a[0] = false ,a[1] = false ");
actions.put( "01 ", "a[0] = false ,a[1] = true ");
actions.put( "10 ", "a[0] = true ,a[1] = false ");
actions.put( "11 ", "a[0] = true ,a[1] = true ");
for (int i = 0; i < a.length; i++) {
if (a[i]) {
option = option + "1 ";
} else {
option = option + "0 ";
}
}
String target = (String) actions.get(option);
System.out.println(target);
}
}
------解决方案--------------------可以考虑用位运算啊,这样就能判断多个条件是否同时成立了
------解决方案--------------------就是用模仿中断向量表的方式实现,先得到一个条件号,然后跳转到对应的位置执行
------解决方案--------------------先把互斥的条件挑出来。这样if的次数就更少了。
不过这个问题一般应该考虑各个条件之间的逻辑。在逻辑层面上下功夫,重新设定条件,减少交叉判断的次数。
在编程上没有多少可以调整的方法。呵呵。
------解决方案--------------------关注~学习中~~
------解决方案--------------------做个二叉树吧,节点接口返回一个boolean值,作判断,叶子执行处理。然后用配置文件配起来。
------解决方案--------------------用Hash(Map或Table)是比较省事的一种,相当于一个对应了一个简单数据库.
就拿你这个例子来说
A.B.C.D.E.F 真假 用 0(假) 和 1(真)表示.
生成64中结果,放入Hash(Map或Table)的数组中.用if..else语句判断也不过用6句.
当A满足时 返回 1,不满足时 返回 2
.....
最后将返回值拼接起来结果 如 : 001110
在从Hash(Map或Table)中取出数据就可以了。