如何解决如何从另一个类中提取变量
我目前正在创建一个银行应用程序。这样做的想法是让用户输入他们的名字,代码检查是否存在具有该名称的文件(例如 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
方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。