2016-03-13 2 views
1

Donc j'essaye actuellement de construire des Sentences dans Propositionical Logic en java mais j'ai rencontré un problème avec ce qui est probablement Java basique mais j'ai essayé de le rechercher et je ne sais pas qu'est-ce qui ne va pas? Le problème que je rencontre est que lorsque je construis une nouvelle phrase complexe (qui a un connectif binaire, un côté gauche et un côté droit), elle change mes anciennes phrases. Comment cela peut-il changer les instances précédentes si j'en entame une nouvelle et ne l'ajoute même pas à la base de connaissances? Lorsque j'ai exécuté le débogueur, il semble que lorsque la nouvelle deuxième phrase est en cours de construction, elle utilise toujours l'ancienne instance, car l'ancienne instance était "this" dans les variables du débogueur.Java nouvelle instance d'objet changeant les anciennes instances

Voici ma méthode principale:

public static void main(String[] args) { 

    runModusPonens(); 
} 


public static void runModusPonens(){ 
    KB modusKB=new KB(); 
    Symbol p=modusKB.intern("P"); 
    Symbol q=modusKB.intern("Q"); 
    modusKB.add(p); 
    Sentence im=new ComplexSentence(LogicalConnective.IMPLIES,p,q); 

    modusKB.add(im); 

    modusKB.printWorld(); 

    Sentence i=new ComplexSentence(LogicalConnective.AND,q,p); 

    modusKB.printWorld(); 
} 

** La sortie est:

Première modusKB imprimer:

P 

(P IMPLIES Q) 

Deuxième modusKB imprimer (après la 2ème phrase a été créé)

P 

(Q AND P) //-->Should still be (P IMPLIES Q)** 

Et ma classe ComplexSentence

public class ComplexSentence implements Sentence{ 
//Sentence structure: leftSide(left hand side sentence) binarycon(connective) rightSide(right hand side sentence) 
public static LogicalConnective binarycon; 
public static Sentence leftSide; 
public static Sentence rightSide; 

public ComplexSentence(LogicalConnective connective,Sentence left, Sentence right){ 
    binarycon=connective; 
    leftSide=left; 
    rightSide=right; 
} 



public String toString() { 
    return "("+this.leftSide+" "+this.binarycon+" "+this.rightSide+")"; 
} 

} 

Note: interface phrase n'a rien à encore ne peut donc pas l'être.

+0

Toutes vos variables sont statiques. Ils ne devraient pas être statiques si vous ne voulez pas qu'une instance change leur valeur. – Makoto

Répondre

2

Votre problème semble être les membres statiques, qui sont partagées par toutes les instances de votre classe ComplexSentence:

public static LogicalConnective binarycon; 
public static Sentence leftSide; 
public static Sentence rightSide; 

les rendent non statique afin de permettre différentes instances de la classe d'avoir des valeurs différentes.

+0

Oh votre droit merci beaucoup! J'avais oublié ça. – clue3434