2017-02-14 45 views
0

私はif()文を使ってトランジションを制御しますが、動作しません。どうすればこれらの問題を解決できますか? EasyFSMライブラリを使用して、Finite State Machineに基づくシミュレーションを実装します。Java if()文が機能しない

私自身のコードを添付します。これは私が解決したい問題を抱えているコードの一部に過ぎません。

私は構文エラーがないことだと思うが、私はプログラムの実行時に遷移が存在しない(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(); 
+1

文字列を比較しないでくださいh '=='、Javaでは '.equals()'を使います。 –

答えて

4
if(f.getCurrentState().toString()=="IDLE") //is wrong use 

if(f.getCurrentState().toString().equals("IDLE")) 
+0

私は通常Pythonなので、間違えました:)ありがとうございました。私は感謝します! :) –

+0

遊びはすべて私のものです。 –

1

この条件は決して正しいかあなたが

Stringオブジェクトがequalsメソッド

if("IDLE".equals(f.getCurrentState().toString())) 
を使用して比較する必要があります参照と、オブジェクトのない内容を比較している

if(f.getCurrentState().toString()=="IDLE") { 

関連する問題