2016-02-17 66 views
1

呼叫在傑斯操縱對象從Java

我寫我的碩士論文從來就使用JESS平臺吧。我想問個問題。

例如,我有這個Java類,它被命名爲「主」:

public class Main { 

    private String user = "Joe"; 
    public String getUser(){ return user; } 
    public String setUser(String user){ this.user = user;} 
    public static void main(String[] args) throws Exception { 
     Main main = new Main(); 
     Rete rete = new Rete(); 
     rete.store("main", main); 
     rete.batch("two.clp"); 
    } 
} 

現在我想打電話給CLP-文件,並操縱主類,對象和做到這一點:

(printout t "main.user = " ((fetch main) getUser) crlf) ;; I got for this Joe 
((fetch main) setUser "Robin") 
(printout t "main.user = " ((fetch main) getUser) crlf) ;; For this I got Robin 

但是現在我想問你如何從Java代碼中調用這個名爲「Robin」的操縱用戶?如果我這樣用Java調用:

public static void main(String[] args) throws Exception { 
     Main main = new Main(); 
     Rete rete = new Rete(); 
     rete.store("main", main); 
     rete.batch("two.clp"); 
     System.out.println(main.getUser()); 
    } 

我得到結果「喬」而不是「羅賓」。 可以告訴我如何獲取(或調用)Javaobject的操作版本嗎?當我操縱 從Jess到Robin的用戶名時,爲什麼不在我的Java類中操作?

我會感謝您的留言。謝謝。

+0

這將是一個好主意,檢查您發佈的代碼是否(a)沒有語法錯誤,並且(b)真正再現了您所描述的問題。 – laune

+0

那麼你把你的Main類中用戶的值設置爲「Joe」,所以當你調用getUser時,你當然會得到Joe。就像在第二個代碼片段中,你需要調用setUser,main.setUser(「Robin」) –

回答

0

我添加類和我用clp.file:

java類:

package Versuch; 
import jess.*; 

public class Auto { 

    private String marke = ""; 
    private int ps = 0; 

    public Auto(String marke, int ps){ 
     this.marke = marke; 
     this.ps = ps; 
    } 

    public String getMarke() { 
     return marke; 
    } 

    public void setMarke(String marke) { 
     this.marke = marke; 
    } 


    public int getPs() { 
     return ps; 
    } 



    public void setPs(int ps) { 
     this.ps = ps; 
    } 

    public static void main(String[] args) { 
     String getAktuell = ""; 

     Auto vw = new Auto("VW", 90); 
     getAktuell = vw.getMarke(); 
     System.out.println(" before manipulating " + getAktuell); 

     Rete engine = new Rete(); 
     engine.store("vw", vw); 
      try { 
       engine.batch("Versuch/rulebase.clp"); 

       System.out.println(" after manipulating " + getAktuell); 



      } catch (JessException e) { 
       System.out.println("JESS ERROR"); 
       e.printStackTrace(); 
      }  


    } 

} 

clp.file:

(printout t "vw.getMarke = " ((fetch vw) getMarke) crlf) 

((fetch vw) setMarke "Mercedes") 


(printout t "vw.getMarke = " ((fetch vw) getMarke) crlf) 

輸出:

before manipulating VW 
vw.getMarke = VW 
vw.getMarke = Mercedes 
after manipulating VW 

第一個輸出和最後一個tput是來自java類的system.out.println調用。第二個和第三個輸出是來自clp.file的打印輸出調用。 任何人都明白爲什麼最後一次通話不是被操縱的? 對不起,這個問題真的很新鮮。 我將非常感謝您的幫助。

+0

哦,好吧,我得到了解決方案。我忘了問實際價值。如果我在system.out.println(「操作」+ getAktuell)之前添加,則此 - > getAktuell = vw.getMarke();比我得到vw對象的操縱版本。有時在詢問某人之後思考一些問題比較容易:-) thx –

+0

*詢問*總是可以的,但是(正如你現在可以清楚地看到的那樣)它不是*可以問一個沒有描述的問題你的問題。 - 您可能會刪除整個問題 - 對任何人都沒有好處。 - 永遠不要用附加信息回答你自己的問題 - 這應該進入你的問題,你可以編輯。 – laune

+1

請不要「肆意」你的帖子,請給出這樣的混亂。您應該將這些信息編輯到您的問題中,然後使用下方的「刪除」鏈接刪除該信息。 – Glorfindel