从其他类访问cplex java变量
我在Java中使用cplex,我想从另一个类访问变量的值 (解决后) 我的程序配置类应该打印变量p15[i][j][q],如下所示:从其他类访问cplex java变量,java,cplex,Java,Cplex,我在Java中使用cplex,我想从另一个类访问变量的值 (解决后) 我的程序配置类应该打印变量p15[i][j][q],如下所示: import [...] public class Ausführung { public static void main(String[] args) throws IOException { try{ String filename = "[...] Data data = new Data(filename)
import [...]
public class Ausführung {
public static void main(String[] args) throws IOException {
try{
String filename = "[...]
Data data = new Data(filename);
IloCplex cplex = new IloCplex();
IloNumVar[][][] w = new IloIntVar[n][n][n];
MainTSP.buildModel(cplex, data, w);
if(cplex.solve()){
for(int q=0; q< data.distance1.length-1; q++){
for(int ii=0; ii<data.distance1.length; ii++){
for(int j=0; j<data.distance1.length; j++){
if(cplex.getValue(p15[i][j][q]) >= 1) System.out.println("p15");
}
}
}
cplex.end();
}
[...]
}
}
public class MainTSP {
static void buildModel(IloMPModeler model, Data data, IloNumVar[][][] w) throws IloException{
IloNumVar[][][] p15 = new IloIntVar[n][n][n];
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
for(int q=0; q<n; q++){
p15[i][j][q] = model.intVar(lb, ub);
}
}
}
[...]
public class MainTSP {
static IloNumVar[][][] p15;
static void buildModel(IloMPModeler model, Data data, IloNumVar[][][] w) throws IloException{
p15 = new IloIntVar[n][n][n];
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
for(int q=0; q<n; q++){
p15[i][j][q] = model.intVar(lb, ub);
}
}
}
[...]
导入[…]
奥斯富隆公务舱{
公共静态void main(字符串[]args)引发IOException{
试一试{
字符串filename=“[…]
数据=新数据(文件名);
IloCplex cplex=新的IloCplex();
IloNumVar[][]w=新的IloIntVar[n][n][n];
MainTSP.buildModel(cplex,data,w);
if(cplex.solve()){
对于(int q=0;q 对于(int ii=0;ii您可以使用语法OtherClass.p15
访问另一个类中声明的静态
变量。如果该变量是实例变量(声明中没有静态
关键字),则需要另一个类的实例来访问该变量:
OtherClass thing = . . .;
. . . cplex.getValues(thing.p15[i][j][q]) . . .
在这两种情况下,您都需要确保变量具有权限,以便引用代码可以访问它
如果不了解您的总体软件结构,就很难说解决问题的“最优雅”的方法是什么
编辑:编辑后,我想我看到了问题。当方法buildModel
返回时,局部变量p15
不再存在(超出范围)。您需要将数组存储在某个位置。我认为最简单的更改是修改MainTSP
类,使其看起来如下:
import [...]
public class Ausführung {
public static void main(String[] args) throws IOException {
try{
String filename = "[...]
Data data = new Data(filename);
IloCplex cplex = new IloCplex();
IloNumVar[][][] w = new IloIntVar[n][n][n];
MainTSP.buildModel(cplex, data, w);
if(cplex.solve()){
for(int q=0; q< data.distance1.length-1; q++){
for(int ii=0; ii<data.distance1.length; ii++){
for(int j=0; j<data.distance1.length; j++){
if(cplex.getValue(p15[i][j][q]) >= 1) System.out.println("p15");
}
}
}
cplex.end();
}
[...]
}
}
public class MainTSP {
static void buildModel(IloMPModeler model, Data data, IloNumVar[][][] w) throws IloException{
IloNumVar[][][] p15 = new IloIntVar[n][n][n];
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
for(int q=0; q<n; q++){
p15[i][j][q] = model.intVar(lb, ub);
}
}
}
[...]
public class MainTSP {
static IloNumVar[][][] p15;
static void buildModel(IloMPModeler model, Data data, IloNumVar[][][] w) throws IloException{
p15 = new IloIntVar[n][n][n];
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
for(int q=0; q<n; q++){
p15[i][j][q] = model.intVar(lb, ub);
}
}
}
[...]
似乎没有任何理由将p15
设置为实例字段(如果出于其他原因需要将其设置为实例字段,则需要使用MainTSP=new MainTSP();
之类的方法创建MainTSP
的实例)
另一种方法是创建buildModel
returnp15
,然后将返回值分配给Ausführung
类中名为p15
的另一个变量:
public class MainTSP {
static IloNumVar[][][] buildModel(IloMPModeler model, Data data, IloNumVar[][][] w) throws IloException{
p15 = new IloIntVar[n][n][n];
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
for(int q=0; q<n; q++){
p15[i][j][q] = model.intVar(lb, ub);
}
}
}
return p15;
[...]
(也许这就是您计划对w
参数所做的操作?也许只需在buildModel
中将p15
替换为w
即可解决您的问题。)我添加了一些关于程序结构的更多信息。我如何确切地创建另一个类的实例?@Hendrik-这很有帮助。我在回答中添加了一些代码,建议使用几种不同的方法来处理此问题。