Java 变量赋值问题

Java 变量赋值问题,java,Java,我正在创建一个项目,允许用户做什么,你通常可以与银行(创建,删除帐户,取款,存款,打印交易) 我的问题是打印事务。我可以打印一些东西,但是出现了错误的值。例如,创建银行账户时,需要输入期初余额(5.00)。当我打印事务时,什么也不会出现。所以我把钱存入同一个账户(10.00),当我打印时,前面的(5.00)出现,而(10.00)出现在交易日期中。然而,当我查看账户余额时,所有余额加起来就是它所显示的 有人能帮我解决问题吗 package mainsample; import java.util.

我正在创建一个项目,允许用户做什么,你通常可以与银行(创建,删除帐户,取款,存款,打印交易)

我的问题是打印事务。我可以打印一些东西,但是出现了错误的值。例如,创建银行账户时,需要输入期初余额(5.00)。当我打印事务时,什么也不会出现。所以我把钱存入同一个账户(10.00),当我打印时,前面的(5.00)出现,而(10.00)出现在交易日期中。然而,当我查看账户余额时,所有余额加起来就是它所显示的

有人能帮我解决问题吗

package mainsample;
import java.util.*;

public class Main {


    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        BankProcess bankProcess = new BankProcess();
        TransactionProcess transactionProcess = new TransactionProcess();


    Bank bank = new Bank();
    BankAccount bankAccount = new BankAccount();

    int input;
    int selection;

    while(true) {
      System.out.println(""); 
      System.out.println("######## MENU ########");
      System.out.println("[1] Create an account");
      System.out.println("[2] Print all existing accounts");
      System.out.println("[3] Delete an account");
      System.out.println("[4] Deposit");
      System.out.println("[5] Withdraw");
      System.out.println("[6] Print transactions");
      System.out.println("[0] Exit");      
      System.out.println("######################");
      System.out.println("Please choose one of the following: ");
      selection = scan.nextInt();

      switch (selection) {

        case 0:
          System.out.println("Exit Successful");
          System.exit(0);
            break;

        case 1:
          System.out.println("'[1] Create an account' has been selected.");
          System.out.print("Account Id: ");
          int accountId = scan.nextInt();
          scan.nextLine();

          System.out.print("Holder Name: ");
          String holderName = scan.nextLine();

          System.out.print("Holder Address: ");
          String holderAddress = scan.nextLine();

          System.out.print("Opening Balance: ");
          double openingBalance = scan.nextDouble();

          System.out.print("Open Date: ");

          String openDate = scan.next();

          bankAccount = new BankAccount(accountId, holderName, openingBalance, holderAddress, openDate);
          bank.setAccounts(bankProcess.openNewAccount(bank.getAccounts(), bankAccount));

          System.out.println("Successfully Added.");
          break;      

        case 2:
          System.out.println("'[2] Display all existing accounts' has been selected");
          System.out.println("-----------------------------------------------------");
            bank.getAccounts().forEach((i,b)->System.out.println(b));
          System.out.println("-----------------------------------------------------");
            break;

        case 3:
            System.out.println("[3] Delete an account has been selected");
            System.out.println("Enter the account ID: ");
            int accountNo = scan.nextInt();
            bankAccount = bank.getAccount(accountNo); // get bankAccount from account id
            bank.removeAccounts(bankProcess.removeAccount(bank.getAccounts(), bankAccount));
            System.out.println("Account has been deleted.");
      break;

        case 4:
            System.out.println("[4] Deposit has been selected");
            System.out.println("Enter account ID: ");
            int accountNumber =  scan.nextInt(); 

            System.out.println("Enter deposit amount: ");
            double depositAmount = scan.nextDouble();           

            transactionProcess.deposit(bankAccount, depositAmount);


            break;

        case 5:
            System.out.println("[5] Withdraw has been selected");
            System.out.println("Enter account ID: ");
            int accountNu =  scan.nextInt(); 

            System.out.println("Enter withdraw amount: ");
            double withdrawAmount = scan.nextDouble();           

            transactionProcess.withdraw (bankAccount, withdrawAmount);           

            break;           


        case 6:
            System.out.println("[6] Print Transaction has been selected");
            System.out.println("Enter account ID: ");
            int accountN = scan.nextInt();
            bankAccount = bank.getAccount(accountN);
            for (Transaction transaction: bankAccount.getTransactions()) {
            // print transaction information ...
            System.out.println(transaction.toString());

}



            break;






        default:
          System.out.println("Your choice was not valid!");

      }

    }
  }
}
包主样本;
/**
*
*@作者哈立德
*/
公共类事务处理过程{
公共无效存款(银行账户,双倍存款金额){
//获得当前余额
double currentBalance=bankAccount.getCurrentBalance();
//第一个参数:设置事务的Id
//第二个参数:设置事务的类型
//第三个参数:设置TransactionMount
//第四个参数:在交易前设置余额(用于记录)
交易交易=新交易(“存款”,当前余额,(整数)存款金额);
如果(存款金额您没有打电话:

bankAccount=bank.getAccount(accountN)

在第4点(存款)和第5点(取款)中指出您的银行账户

修正:


首先,您在Transaction Constructor中犯了一个错误

public Transaction( String transactionType, double transactionAmount, int transactionDate) {

        this.transactionType = transactionType;
        this.transactionAmount = transactionAmount;
        this.transactionDate = transactionDate;

    }
但你是这样分配的

Transaction transaction = new Transaction("Deposit", currentBalance, (int) depositAmount);
你的论点顺序完全错误。你为什么指定存款金额而不是日期。应该是这样的

Transaction transaction = new Transaction("Deposit", (int) depositAmount,date );
另外,当您创建一个新帐户时,您尚未将该金额添加到交易中。您正在使用此代码创建一个新帐户

bankAccount = new BankAccount(accountId, holderName, openingBalance, holderAddress, openDate);
bank.setAccounts(bankProcess.openNewAccount(bank.getAccounts(), bankAccount));
但您尚未将此初始金额添加到事务中。它应包含在bankAccount的构造函数中

Transaction transaction = new Transaction("Deposit", 0, (int) depositAmount);

if (depositAmount <= 0) {
  System.out.println("Amount to be deposited should be positive");
} else {
  //Set the updated or transacted balance of bankAccount.
  bankAccount.setCurrentBalance(currentBalance + depositAmount);
  //then set the MoneyAfterTransaction

  bankAccount.addTransaction(transaction);    // adds a transaction to the bank account
  System.out.println(depositAmount + " has been deposited.");
}

您的bankaccount类别在哪里?是否可能您没有使用` bankaccount=bank.getAccount(accountNo)'获得实际的´来自案例4和案例5?@andresoviedo你是什么意思?@InsideFootball你要求用户输入帐号,但你没有得到那个帐号。你正在使用以前选择的帐号。@andresoviedo我如何修复它?我不明白你想说什么。第4点和第5点有效。我可以通过查看当前余额来测试它。事务处理工作不正常(打印)@andresoviedo,我正在测试他的应用程序并键入答案,看不到你的comment@Inside足球不,我会更好地解释:在案例4和5中,你不引用你选择的账户,但是,如果你在其他案例中选择了某个账户,你会引用该账户,或者,如果你没有选择任何选项,你会引用银行账户=new BankAccount();在第16行中实例化。@razcor您能指出哪个部分不正确。@razcor您可以将您的答案标记为“社区wiki”。查看您为什么将currentBalance更改为0?创建新帐户时,当前余额应为0。此外,您在Transaction Process Constructor中犯了一些错误。请检查它
Transaction transaction = new Transaction("Deposit", (int) depositAmount,date );
bankAccount = new BankAccount(accountId, holderName, openingBalance, holderAddress, openDate);
bank.setAccounts(bankProcess.openNewAccount(bank.getAccounts(), bankAccount));
Transaction transaction = new Transaction("Deposit", 0, (int) depositAmount);

if (depositAmount <= 0) {
  System.out.println("Amount to be deposited should be positive");
} else {
  //Set the updated or transacted balance of bankAccount.
  bankAccount.setCurrentBalance(currentBalance + depositAmount);
  //then set the MoneyAfterTransaction

  bankAccount.addTransaction(transaction);    // adds a transaction to the bank account
  System.out.println(depositAmount + " has been deposited.");
}
Transaction Amount : 5.0 Transaction Type : Deposit Transaction Date:  4

Transaction Amount : 10.0 Transaction Type : Deposit Transaction Date: 10