上限和下限在Cplex中等于0.0(在Cplex java中)

上限和下限在Cplex中等于0.0(在Cplex java中),java,nullpointerexception,cplex,Java,Nullpointerexception,Cplex,我有一个循环,其中有时上界和下界是0.0 当时我不想执行以下命令 Test[index]=cplex.numVar(0.0, upperBound); 我可以跳过它,但是在Test[index]null中将被保存,因为下面代码中的下一个方法将给出null指针异常 constraint.addTerm(RezCapZZ[index ], 1); 在不执行UB和LB等于0.0的情况下,如何继续。需要找到一种方法,使第二个方法不会引发空指针异常 constraint.addTerm(RezCapZ

我有一个循环,其中有时上界和下界是0.0 当时我不想执行以下命令

Test[index]=cplex.numVar(0.0, upperBound);
我可以跳过它,但是在Test[index]null中将被保存,因为下面代码中的下一个方法将给出null指针异常

constraint.addTerm(RezCapZZ[index ], 1);
在不执行UB和LB等于0.0的情况下,如何继续。需要找到一种方法,使第二个方法不会引发空指针异常

constraint.addTerm(RezCapZZ[index ], 1);
我之所以这样做,是因为我们需要保存cplex的内存不必要的0计算

第一种方法:

            for (int y = 0; y < 3; y++) {
                for (int r = 0; r < 3; r++) {
                    for (int oc = 0; oc < 3; oc++) {
                        for(int dc=0; dc < 3 ;dc++){
                                        UB=  0.0;
                                        int index = y*3*3*3 + r*3*3 + oc*3 + dc;
                                        Test[index]  = cplex.numVar(0.0, UB);
                                        System.out.println("Value of Test is : " + Test[index]);

                        }
                    }
                }
            }
for(int y=0;y<3;y++){
对于(int r=0;r<3;r++){
对于(int oc=0;oc<3;oc++){
对于(int dc=0;dc<3;dc++){
UB=0.0;
int index=y*3*3*3+r*3*3+oc*3+dc;
测试[指数]=cplex.numVar(0.0,UB);
System.out.println(“测试值为:“+Test[index]);
}
}
}
}
这里的Test[index]类型为IloNumVar[]Test=new IloNumVar[3*3*3*3]

第二种方法:

for (int l = 0; l < 3; l++) {
                            for (int y = 0; y < 3; y++) {
                                for (int r = 0; r < 3; r++) {
                                    for(int oc=0; oc< 3 ; oc++){
                                        index =  l*3*3*3 + y*3*3 + r*3 + oc;

                                        **constraint.addTerm(Test[index ], 1);**

                                    }
                                }
                            }
                        }
for(int l=0;l<3;l++){
对于(int y=0;y<3;y++){
对于(int r=0;r<3;r++){
对于(int oc=0;oc<3;oc++){
指数=l*3*3*3+y*3*3+r*3+oc;
**约束.addTerm(测试[索引],1)**
}
}
}
}

这里的约束是IloLinearNumExpr constraint=cplex.linearNumExpr()

在第一种方法中添加检查:

if( 0.0 == UB || 0.0 == UB ) {
    continue;
}
并在第二种方法中添加一个复选框:

if( null == Test[index] ) {
   continue;
}

或者

是,这将跳过第一个方法UB和LB计算,但在第二个方法中,将出现nullPointerException,因为对于UB==LB==0.0的方法,Test[index]现在为null。。。我被第二种方法绊倒了…它看起来像是你的第一种方法,种子
测试
数组-对吗?如果是这样的话,你需要决定什么是“正确的事情”,当它为零时——也许只是继续,因为我已经编辑了我的答案,也提供了。