Идентификатор счета в программе банка Java не повышается?

1

Каждый раз, когда делается банковский счет, идентификатор учетной записи должен быть увеличен на единицу, но каждый раз, когда я пытаюсь вытащить идентификатор, я просто получаю идентификатор учетной записи, равный 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();
         }
     }

 }
}
  • 0
    bankID является static ?
  • 0
    Последний присвоенный номер является статическим, который увеличивается на единицу, а затем присваивается номеру
Показать ещё 2 комментария
Теги:
static

3 ответа

1
Лучший ответ

У вас есть неорганизованный способ создания ваших объектов BankAccount, в зависимости от того, установлен ли вы присвоенный ID или нет, зависит от того, какой конструктор вы используете. Если вы переписываете свои конструкторы так, чтобы они были соединены вместе, с основным конструктором, который выполняет все основные обязанности и вторичный конструктор, который присваивает значения по умолчанию и делегирует основной, тогда инициализация будет иметь согласованные результаты.

(Терминология - это Scala, конструктор-цепочка обязательна на этом языке.)

Здесь основным конструктором будет:

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

и добавьте вторичный конструктор:

public BankAccount() {
    this(0);
}

и вы получите идентификатор, созданный независимо от того, что вы вызываете.

(Это похоже на ответ Лоренцо, который я рассмотрел для четкого описания проблемы. Разница в том, что его цепочка движется в другом направлении, так что значение по умолчанию назначается, а затем перезаписывается.)

1

Вы можете просто попробовать это

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;
}
  • 0
    Но мне нужно, чтобы он увеличивался на единицу для каждой сделанной учетной записи.
  • 0
    да, это будет работать. Я BankAccount его для каждого объекта создания класса BankAccount . Просто попробуй.
Показать ещё 1 комментарий
1

Код вызывает:

BankAccount account = new BankAccount(init);

который идет к этому конструктору:

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

если вы также хотите получить вызов другого конструктора (тот, который присваивает идентификатор), вам нужно изменить его следующим образом:

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

Java не вызывает конструктор по умолчанию, если вы этого не скажете.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню