我想知道为什么每次调用方法时我的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);
}
}
答案 0 :(得分:2)
问题是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);
}
还要注意,实例变量通常应该是私有的,以遵守信息隐藏原则。
答案 1 :(得分:0)
将其更改为
public static int policyNumber;
static关键字使java在创建新对象时保留变量的值。
检查出来:
答案 2 :(得分:0)
将policyNumber作为静态变量。
答案 3 :(得分:0)
尝试:
public static int policyNumber;
答案 4 :(得分:0)
每次都会增加。
您必须明白,当您有效地调用构造函数三次时,您将创建三个不同的类策略对象,每个对象都有自己的策略编号。
如果你希望一个类的所有对象都具有公共变量,则将其声明为静态。
答案 5 :(得分:0)
首先,您的policyNumber变量是成员变量,而不是类变量。如果要跨类实例访问它,则需要将其设置为静态。
public int policyNumber; // Not suited for your case.
请尝试以下方法:
public static int policyNumber = 0;
其次,每次创建Policy类的实例时,都会重新初始化policyNumber。
public Policy()
{
policyNumber = 0; // Why to re-initialize it as you want to persist its value.
}
请尝试以下方法:
public Policy()
{
policyNumber++;
}