我使用if()
句来控制某些转换,但它不起作用。我该如何解决这些问题?我使用EasyFSM库来实现基于有限状态机的仿真。
我附上自己的代码。这只是我的代码中我想要解决的问题的一部分。
我认为没有语法错误,但是当我运行程序时没有转换(f.ProcessFSM(~)
不起作用)并且只有IDLE
个状态(它是第一个状态FSM。)
我该如何解决这个问题?
FSM f = new FSM("C://Users//losin//Desktop//file//PMC.xml", new FSMAction() {
@Override
public boolean action(String curState, String message, String nextState, Object args) {
return true;
}
});
for(int j=0; j <10 ; j++) {
list.add(f.getCurrentState().toString());
if(f.getCurrentState().toString()=="IDLE") {
double rnd1 = Math.random();
if(list.contains("PROCESS_COMPLIETED")==true) {
if(rnd1 < 0.05) {
f.ProcessFSM("FAIL");
} else if(rnd1 < 0.15) {
f.ProcessFSM("CLEAN");
} else {
f.ProcessFSM("LOAD");
}
} else {
if(rnd1 < 0.05) {
f.ProcessFSM("FAIL");
} else {
f.ProcessFSM("LOAD");
}
}
} else if(f.getCurrentState().toString()=="PREPARE") {
f.ProcessFSM("PROCESS_START");
} else if(f.getCurrentState().toString()=="PROCESS") {
double rnd2 = Math.random();
if(rnd2 < 0.05) {
f.ProcessFSM("FAIL");
} else {
f.ProcessFSM("COMPLETE");
}
} else if(f.getCurrentState().toString()=="PROCESS_COMPLETED") {
f.ProcessFSM("UNLOAD");
} else if(f.getCurrentState().toString()=="FAILURE") {
f.ProcessFSM("FIX");
} else {
f.ProcessFSM("CLEAN_END");
}
}
CSVUtils.writeLine(writer, list);
writer.flush();
writer.close();
答案 0 :(得分:4)
if(f.getCurrentState().toString()=="IDLE") //is wrong use
if(f.getCurrentState().toString().equals("IDLE"))
答案 1 :(得分:1)
这种情况永远不正确
if(f.getCurrentState().toString()=="IDLE") {
您正在比较参考而不是对象的内容
必须使用equals方法
比较字符串对象 if("IDLE".equals(f.getCurrentState().toString()))