如何从另一个类中提取变量

问题描述

我目前正在创建一个银行应用程序。这样做的想法是让用户输入他们的名字,代码检查是否存在具有该名称文件(例如 john.txt)。如果存在,系统将提示用户存款/取款/检查余额/退出他们的银行,并将他们新的更新余额保存到此 txt 文件中。如果用户不存在,它会创建一个余额为 0 的 txt 文件用户可以对他们的银行执行相同的过程。我让这部分一切正常。

我遇到的问题在于下一步。我现在想创建一个用户已完成的交易列表并将它们添加到另一个 txt 文件(例如 johnTransactions.txt)。我获取用户名的方式来自我使用扫描仪创建的 Reader 类中的方法。我不知道如何将这个名称变量提取/移动(不确定这里的正确术语)到我的 Bank 类,在那里我将使用它来将我的交易列表写入文件名+“transactions.txt”。

在我的跑步课程中,我可以使用 account.getName 打印出 John,但是当我在银行课程中执行 account.getName 时,它​​返回为 null。我怀疑问题出在我的代码运行顺序的某个地方,但我似乎无法弄清楚问题所在。我在我的银行/帐户/跑步者类下面附上了一些代码,但请有人帮我理解为什么帐户中的 getName 返回 null 但跑步者中的 getName 返回正确的名称

银行

public class Bank {
    Account account = new Account();
    ScannerClass scanner = new ScannerClass();
    DateManager dateManager = new DateManager();
    List<Transaction> transactions = account.getTransactions();

public double ManageBank(double balance) {
    // Todo Auto-generated method stub

    int userChoice;

    boolean quit = false;

    do {

        userChoice = scanner.InitialChoiceScanner();

        double amount;
        String name = account.getName();
        switch (userChoice) {

        case 1:

            amount = scanner.DepositScanner();
            balance = account.Deposit(balance,amount);
            System.out.print("Your new balance is: " + balance);

            String depositFullDate = dateManager.getDateAsstring();
            Transaction depositTransaction = new Transaction("Depsoit",depositFullDate,amount);
            transactions.add(depositTransaction);

            break;

        case 2:

            amount = scanner.WithdrawScanner();
            balance = account.Withdraw(balance,amount);
            System.out.print("Your new balance is: " + balance);

            String withdrawFullDate = dateManager.getDateAsstring();
            Transaction withdrawTransaction = new Transaction("Withdraw",withdrawFullDate,amount);
            transactions.add(withdrawTransaction);

            break;

        case 3:

            System.out.print("Your current balance is: " + balance);

            break;

        case 0:

            quit = true;

            break;

        default:

            System.out.println("Please select a valid choice;");

            break;

        }

        System.out.println();

    } while (!quit);

    account.setTransactions(transactions);
    System.out.println("This is the name" + name);
    System.out.println("Thankyou for using the banking service!");

    return balance;
}

帐户

public class Account {

private String name;
private Double balance;
private List<Transaction> transactions = new ArrayList<Transaction>();



public List<Transaction> getTransactions() {
    return transactions;
}

public void setTransactions(List<Transaction> transactions) {
    this.transactions = transactions;
}

Scanner sc = new Scanner(system.in);

Reader reader = new Reader();
Writer writer = new Writer();



public Account(String name,double balance) {
    super();
    this.name = name;
    this.balance = balance;
}

public Account() {
    
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public double getBalance() {
    return balance;
}

public void setBalance(double balance) {
    balance = this.balance;
}

public double Deposit(double balance,double amount) {
    balance = balance + amount;
    return balance;
}

public double Withdraw(double balance,double amount) {
    balance = balance - amount;
    return balance;
}

public void ManageAccount(String name) {
    Bank bank = new Bank();
    try {
        File myObj = new File(name + ".txt");
        
        if (myObj.createNewFile()) {
            File myTransactionObj = new File(name + "Transactions.txt");
            myTransactionObj.createNewFile();
            // If File doesn't exist creates name.txt with 0 balance
            writer.SingleLineWriter(name,"0");
        } else {
            setName(name);
            String line = reader.SingleLineRead(name);

            double balance = Double.parseDouble(line);
            
            double newBalance = bank.ManageBank(balance);

            writer.BalanceAppender(newBalance,name);
            
            

        }

    } catch (IOException e) {
        System.out.println("An error occurred.");
        e.printstacktrace();
    }
    
    
}

跑步者

public static void main(String[] args) {
        Account account = new Account();
        ScannerClass scanner = new ScannerClass();

        String name=scanner.NameScanner();
        account.ManageAccount(name);






    }

解决方法

您已创建帐户对象,但尚未设置名称

Account account = new Account();

结果 account.getName() 为空,您需要在尝试通过 getter 访问之前设置 account.setName()

您需要重新审视 ManageAccount 方法