Java 新对象实例更改旧实例
Java new object instance changing the old instances
所以我目前正在尝试在 java 中构建命题逻辑中的句子,但我 运行 遇到了一个可能是基本问题 Java 的问题,但我已经尝试研究它而且我不知道到底出了什么问题。
我 运行 遇到的问题是,当我构造一个新的复合句(它有一个二元连接词、一个左侧和一个右侧)时,它改变了我的旧句子。如果我正在启动一个 b运行d 新实例,甚至没有将它添加到 KB(知识库),它怎么能改变以前的实例呢?当我 运行 调试器看起来像在构造新的第二句时,它仍然使用旧实例,因为旧实例是调试器变量中的 "this"。
这是我的主要方法:
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();
}
**输出为:
第一个 modusKB 打印出来:
P
(P IMPLIES Q)
第二次 modusKB 打印输出(在创建第 2 句之后)
P
(Q AND P) //-->Should still be (P IMPLIES Q)**
还有我的 ComplexSentence class
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+")";
}
}
注意:Sentence界面还没有任何内容,所以不可能。
您的问题似乎是静态成员,它们由您的所有实例共享 ComplexSentence
class :
public static LogicalConnective binarycon;
public static Sentence leftSide;
public static Sentence rightSide;
使它们成为非静态的,以允许 class 的不同实例具有不同的值。
所以我目前正在尝试在 java 中构建命题逻辑中的句子,但我 运行 遇到了一个可能是基本问题 Java 的问题,但我已经尝试研究它而且我不知道到底出了什么问题。
我 运行 遇到的问题是,当我构造一个新的复合句(它有一个二元连接词、一个左侧和一个右侧)时,它改变了我的旧句子。如果我正在启动一个 b运行d 新实例,甚至没有将它添加到 KB(知识库),它怎么能改变以前的实例呢?当我 运行 调试器看起来像在构造新的第二句时,它仍然使用旧实例,因为旧实例是调试器变量中的 "this"。
这是我的主要方法:
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();
}
**输出为:
第一个 modusKB 打印出来:
P
(P IMPLIES Q)
第二次 modusKB 打印输出(在创建第 2 句之后)
P
(Q AND P) //-->Should still be (P IMPLIES Q)**
还有我的 ComplexSentence class
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+")";
}
}
注意:Sentence界面还没有任何内容,所以不可能。
您的问题似乎是静态成员,它们由您的所有实例共享 ComplexSentence
class :
public static LogicalConnective binarycon;
public static Sentence leftSide;
public static Sentence rightSide;
使它们成为非静态的,以允许 class 的不同实例具有不同的值。