我正在尝试使用Java的一些线性编程工具。我决定探索SCPSolver,因为它带有文档。
所以我尝试运行SCPSolver主页中显示的示例:the low lever interface example
public class SCPSolverDemo {
public static void main(String ag[]){
LinearProgram lp = new LinearProgram(new double[]{5.0,10.0});
lp.addConstraint(new LinearBiggerThanEqualsConstraint(new double[]{3.0,1.0}, 8.0, "c1"));
lp.addConstraint(new LinearBiggerThanEqualsConstraint(new double[]{0.0,4.0}, 4.0, "c2"));
lp.addConstraint(new LinearSmallerThanEqualsConstraint(new double[]{2.0,0.0}, 2.0, "c3"));
lp.setMinProblem(true);
LinearProgramSolver solver = SolverFactory.newDefault();
double[] sol = solver.solve(lp);
System.out.println(Arrays.toString(sol)); //line 23
}
}
当我运行它时,我收到一条错误消息
Exception in thread "main" java.lang.NullPointerException
at drafts.SCPSolverDemo.main(SCPSolverDemo.java:23)
我意识到SolverFactory.newDefault();
重新为空。文档sais
搜索LinearProgramSolver服务的服务提供者并返回它找到的第一个实例。如果未找到任何服务,则会将堆栈跟踪打印到stderr并返回null。首次调用此方法时,它会初始化ServiceLoader,ServiceLoader从类路径中查找可用的服务。后续调用使用第一次初始化的结果。因此,如果第一次呼叫时没有可用的服务,则其余的程序运行将没有可用的服务。未来的实现可能会忽略这个问题。
但我不知道如何解决这个问题。在这一点上,我希望得到你的帮助。我从现有的例子中无法理解,我不知道该怎么做。
有人可以给我一个可运行的例子,以便了解发生了什么?提前谢谢