java银行计划帐户ID不上升?

每次创建一个银行帐户时,帐户ID应该提高一个,但每次我尝试提取ID我只是得到帐户ID为0,任何建议,因为我按照它在书中的确切方式我是从中学习它仍然没有更新。

帐户构造函数:

public class BankAccount { public static int bankID = 0; //constructor called by BankAccount michaelsBank = new BankAccount(); public BankAccount(){ balance = 0; lastAssignedNumber++; accountNumber = lastAssignedNumber; } //Constructs a bank account with an initial deposit, will be used if given a number for a parameter public BankAccount(double initialBalance){ balance = initialBalance; } public void deposit(double amount){ balance = balance + amount; } public void withdraw(double amount){ balance = balance - amount; } public double getBalance(){ return balance; } public int getID(){ return accountNumber; } private double balance; private int accountNumber; private static int lastAssignedNumber; } 

银行账户主程序:

 import java.text.*; public class BankAccountTest { public static void main (String args[]){ NumberFormat formatter = NumberFormat.getNumberInstance(); formatter.setMaximumFractionDigits(2); // Helps formatter format for final output formatter.setMinimumFractionDigits(2); ConsoleReader console = new ConsoleReader(System.in); System.out.println("Hello, would you like to make a new bank account?"); String newA = console.readLine(); if(newA.equalsIgnoreCase("yes")){ System.out.println("How much would you like to deposit initially?"); double init = console.readDouble(); BankAccount account = new BankAccount(init); System.out.println("Your account is created, what would you like to do? \n 1: Get Balance \n 2: Get Account ID \n 3: Make a Withdrawl \n 4: Make a Deposit"); int option = console.readInt(); while(option == 1){ System.out.println(account.getBalance() + " Is your balance. \nWhat would you like to do next?"); System.out.println("1: Get Balance \n 2: Get Account ID \n 3: Make a Withdrawl \n 4: Make a Deposit"); option = console.readInt(); } while(option == 2){ System.out.println(account.getID() + " Is your account id.\nWhat would you like to do next?"); System.out.println("1: Get Balance \n 2: Get Account ID \n 3: Make a Withdrawl \n 4: Make a Deposit"); option = console.readInt(); } while(option == 3){ System.out.println("How much would you like to withdraw?"); double withdraw = console.readDouble(); account.withdraw(withdraw); System.out.println("Your new balance is " + account.getBalance() + "\nWhat would you like to do next?"); System.out.println("1: Get Balance \n 2: Get Account ID \n 3: Make a Withdrawl \n 4: Make a Deposit"); option = console.readInt(); } while(option == 4){ System.out.println("How much would you like to deposit?"); double deposit = console.readDouble(); account.deposit(deposit); System.out.println("Your new balance is " + account.getBalance() + "\n what would you like to do next?"); System.out.println("1: Get Balance \n 2: Get Account ID \n 3: Make a Withdrawl \n 4: Make a Deposit"); option = console.readInt(); } } } } 

您有一种无组织的构造BankAccount对象的方法,无论您是否获得ID,都取决于您使用的构造函数。 如果重写构造函数以便它们被链接在一起,主要构造函数负责所有核心职责,而辅助构造函数将默认值和委托分配给主要构造函数,则初始化将具有一致的结果。

(术语是Scala的,构造函数链接在该语言中是强制性的。)

这里的主要构造函数是:

 public BankAccount(double initialBalance){ balance = initialBalance; lastAssignedNumber++; accountNumber = lastAssignedNumber; } 

并添加辅助构造函数:

 public BankAccount() { this(0); } 

无论你打电话给谁,你都会得到一个id。

(这类似于Lorenzo的答案 ,我为了清楚地描述问题而投票。不同之处在于他的链接朝另一个方向发展,因此默认值被分配然后被覆盖。)

代码正在调用:

 BankAccount account = new BankAccount(init); 

转到这个构造函数:

 public BankAccount(double initialBalance){ balance = initialBalance; } 

如果你还想要调用其他构造函数(分配id的那个),你需要改变它如下:

 public BankAccount(double initialBalance){ this(); balance = initialBalance; } 

如果你不告诉它,Java不会调用默认构造函数。

你可以试试这个

 private int accountNumber = ++lastAssignedNumber; private static int lastAssignedNumber; public BankAccount(){ balance = 0; //No need to increment it anywhere. //lastAssignedNumber++; //accountNumber = lastAssignedNumber; } 

要么

你可以尝试initialization block

 private int accountNumber; private static int lastAssignedNumber; //initialization block that will be called for any overloaded constructor also { accountNumber = ++lastAssignedNumber; } public BankAccount(){ balance = 0; //No need to increment it anywhere. //lastAssignedNumber++; //accountNumber = lastAssignedNumber; }