Java - int Counter没有添加

时间:2013-01-31 10:12:08

标签: 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);
        }

}

6 个答案:

答案 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在创建新对象时保留变量的值。

检查出来:

http://www.java-samples.com/showtutorial.php?tutorialid=285

答案 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++; 
}