我想要做的是将新的Transaction对象添加到事务Arraylist并保存到本地文件。然后将该数据拉回并迭代以填充transcationTotal。现在,当我保存新事务时,它会覆盖arraylist中的第一个对象,而不是将对象保存到下一行。
希望能够明白感谢你的帮助!
//Enter Daily Transactions
public void enterTransactions() {
ArrayList<Transaction> transactions = new ArrayList();
System.out.print("Please enter the transaction amount: $");
Scanner amount = new Scanner(System.in);
double transAmount = amount.nextDouble();
System.out.print("Please enter name for this transaction: ");
Scanner name = new Scanner(System.in);
String transName = name.nextLine();
System.out.println("What week is this transaction going under?: ");
Scanner week = new Scanner(System.in);
int transWeek = week.nextInt();
Transaction transaction = new Transaction(transName,transAmount,transWeek);
transactions.add(transaction);
Iterator<Transaction> iterator = transactions.iterator();
while (iterator.hasNext()) {
Transaction i = iterator.next();
i.printStats();
int weekStat = i.getWeek();
if (weekStat == 1) {
double tAmount = i.getAmount();
transactionTotalWeekOne = transactionTotalWeekOne - transAmount;
} else if (weekStat == 2) {
double tAmount = i.getAmount();
transactionTotalWeekTwo = transactionTotalWeekTwo - transAmount;
}
}
try { // Catch errors in I/O if necessary.
// Open a file to write to, named SavedObj.sav.
FileOutputStream saveFile = new FileOutputStream("C:/temp/transactions_log.sav");
// Create an ObjectOutputStream to put objects into save file.
ObjectOutputStream save = new ObjectOutputStream(saveFile);
// Now we do the save.
save.writeObject(transactions);
// Close the file.
save.close(); // This also closes saveFile.
} catch (Exception exc) {
exc.printStackTrace(); // If there was an error, print the info.
}
}
答案 0 :(得分:1)
实际上没有覆盖事务对象。您的ArrayList总是有1个元素,因为每次调用enterTransactions()
方法时都会重新创建它。有一些方法可以防止这种情况。
将transactions
ArrayList移出方法并将其设为静态。
将transactions
ArrayList作为参数提供给enterTransactions(ArrayList transactions)
方法。
因此,不会一次又一次地重新创建列表。
P.S。每次需要输入时都不需要创建扫描仪。只需一台扫描仪即可。