Java if()句子不起作用

时间:2017-02-14 08:22:03

标签: java if-statement

我使用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(); 

2 个答案:

答案 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()))