Каждый раз, когда делается банковский счет, идентификатор учетной записи должен быть увеличен на единицу, но каждый раз, когда я пытаюсь вытащить идентификатор, я просто получаю идентификатор учетной записи, равный 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);
}
и вы получите идентификатор, созданный независимо от того, что вы вызываете.
(Это похоже на ответ Лоренцо, который я рассмотрел для четкого описания проблемы. Разница в том, что его цепочка движется в другом направлении, так что значение по умолчанию назначается, а затем перезаписывается.)
Вы можете просто попробовать это
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;
}
BankAccount
его для каждого объекта создания класса BankAccount
. Просто попробуй.
Код вызывает:
BankAccount account = new BankAccount(init);
который идет к этому конструктору:
public BankAccount(double initialBalance){
balance = initialBalance;
}
если вы также хотите получить вызов другого конструктора (тот, который присваивает идентификатор), вам нужно изменить его следующим образом:
public BankAccount(double initialBalance){
this();
balance = initialBalance;
}
Java не вызывает конструктор по умолчанию, если вы этого не скажете.
bankID
являетсяstatic
?