Java - int Counter 没有添加

标签 java

我想知道为什么每次调用该方法时我的 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/

相关文章:

java - 在 POI 中写入 Excel 工作表之前格式化字符串

java - JSON元素从单个变为列表

Java编程: How do I make this for loop program that accepts user input subtract the input properly?

java - MongoDB 关系

java - FireBase 身份验证身份验证状态已更改

java - 如何将 SharedPreferences 与微调器一起使用

java - 打包在 Mac 应用程序包中时无法访问 Java 资源

Java VM - 释放的内存是否返回到操作系统?

java - java中存储和访问120,000个单词的最佳方式

java - GSON:在两个类中引用相同的对象,解码后实例重复