我想知道为什么每次调用该方法时我的 policyNumber 都不会增加 1。 当我运行它时,我得到了这个。
我试图让我添加的每个策略自动成为 PolicyNumber++。 相反,我得到了相同的号码。相反,相同的值被分配给我制定的所有新政策。
run:
Policy #3 with amount $320.0
Policy #3 with amount $500.14
Policy #3 with amount $0.0
false
我以前用过这个方法,我不明白为什么现在不行了。有人可以阐明一下吗?谢谢!
主类
public class Assignment3 {
public static void main(String[] args) {
Policy p1 = new Policy(320);
Policy p2 = new Policy(500.14);
Policy p3 = new Policy(0);
System.out.println(p2.policyNumber);
p1.print(); System.out.println();
p2.print(); System.out.println();
p3.print(); System.out.println();
System.out.println(p1.isExpired());
}
}
政策类
public class Policy {
double amount;
public int policyCount;
public static int policyNumber;
public Policy(){
amount = 0;
policyCount = 1;
policyNumber=0;
}
public Policy(double a){
amount = a;
policyNumber ++;
}
public boolean isExpired(){
return false;
}
public void print(){
System.out.print("Policy #" + this.policyNumber + " with amount $" + this.amount);
}
}
最佳答案
问题是 policyNumber
不是静态的。因此,它是一个实例变量,对于您实例化的每个对象都有自己的值。如果你想让它成为一个类变量,你应该声明它是静态的:
public static int policyNumber;
检查 this official documentation关于类和实例变量之间的区别。
此外,您必须将静态计数器分配给实例变量。如果您只使用静态变量,则所有实例都将具有类变量的值。如果要为每个实例赋值,则必须将类变量的值复制到实例变量。
public class Policy {
double amount;
public int policyCount;
public static int policyNumber = 0;
private int myPolicyNumber;
public Policy(double a){
amount = a;
myPolicyNumber = policyNumber;
policyNumber ++;
//or even better
//myPolicyNumber = ++policyNumber;
}
}
然后你的打印方法应该是这样的:
public void print(){
System.out.print("Policy #" + myPolicyNumber + " with amount $" + this.amount);
}
还要注意,实例变量通常应该是私有(private)的,以遵守信息隐藏原则。
关于Java - int Counter 没有添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14623229/