1

このプロジェクトの最終結果は、2 つのエラー レポートが のエラー ファイルに送信され、アカウントの概要情報のリストが出力されるというものでした。トランザクション前の残高やアカウントへのトランザクション、またはトランザクションに十分な資金がなかった場合など、アカウント情報の大部分を印刷することができますが、本来あるべきように印刷されるのはそれだけです。エラーや例外は発生していないので、正直なところ、問題がどこにあるのかわかりません。私のコードの2番目の目が、私の問題がどこにあるのかを指摘できることを望んでいました.

Account.java

 public class Account {
     protected String accountNo, institution, name;
     protected double balance;

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

    public String getAccount() {
    return accountNo;
    }

    public boolean debitAccount(double amt) {
    return false;
    }

    public boolean creditAccount(double amt) {
    return false;
     }
    }

CheckingAccount.java

public class CheckingAccount extends Account {

  public CheckingAccount(String acctNo, String name, String inst, double     balance) {
    super(acctNo, name, inst, balance);
    this.name = name;
    this.accountNo = acctNo;
    this.balance = balance;
    this.institution = institution; 

  }

  public double getBalance()
  {
    return balance;
  }


  public boolean debitAccount(double amt) {
    balance += amt;

    return false;

  }

  public boolean creditAccount(double amt) {
    balance -= amt;
    return false;
  }
}

CreditCard.java

public class CreditCard extends Account {
    private double creditLimit;
    private double availableCredit;
 public CreditCard(String acctNo, String name, String inst, double limit, double balance) {
   super(acctNo, name, inst, 0);
   this.creditLimit = creditLimit;
   this.availableCredit = availableCredit;
   this.balance = balance;

 }

 public boolean debitAccount(double amt) {

   balance -= amt;
   return false;
 }

 public double getCreditLimit(){
   return creditLimit;
 }

 public double getBalance()
 {
   return balance;
 }


 public boolean creditAccount(double amt) {
   balance += amt;
   return false;
 }
}

D4.java

import java.io.*;
import java.util.*;
public class D4 {
  public static void main(String[] args) throws FileNotFoundException
  {
    Boolean valid;
    String transactionFile = args[0];
    String theaccount, transaction;
    File transactions = new File(transactionFile);
    Scanner infile = new Scanner(transactions);

    File errorFile = new File(args[1]);
    PrintWriter error = new PrintWriter(errorFile);

    Vector<Account> account = new Vector<Account>();

    while(infile.hasNext())
    {
      transaction = infile.nextLine();
      valid = performTrans(account, transaction, error, errorFile);
   }
  }

  private static Account findAccount(Vector<Account> a, String acctNo) {
    for(int index = 0; index < a.size(); index ++)
    {
      if (a.elementAt(index).getAccount().equals(acctNo))
      {
        return a.elementAt(index);
      }
    }
      return null;
    }
  private static boolean Checkingacct(Account a)
    {
      if(a instanceof CheckingAccount)
      {
        return true;
      }
      else
      {
        return false;
      }
   }

private static boolean Creditcrd(Account a)
{
  if(a instanceof CreditCard)
  {
    return true;
  }
  else
  {
    return false;
  }
}

private static String errorLog(Vector<Account> a, String transaction)
{
  String[] trans = transaction.split(":");
  String error;
  if(findAccount(a, trans[1])==null)
  {
    error = ("Invalid account: " + transaction);
    System.out.println(error);
    return error;
  }
  else
  {
    Account acc = findAccount(a, trans[1]);
    if( trans[0] == "debit")
    {
      error = ("Transaction denied: " + transaction);
      System.out.println(error);
      return error;
    }
    else
    {
      return null;
    }
  }

}

private static boolean performTrans(Vector<Account> account, String transaction, PrintWriter log, File errorFile)
{
  String[] pieces = transaction.split(":");
  String trans = pieces[0];
  System.out.println(pieces);

  if(trans.equals("create"))
  {
    if( pieces[1].equals("checking"))
    {
      CheckingAccount checking = new CheckingAccount(pieces[2], pieces[3], pieces[4], Double.parseDouble(pieces[5]));
      account.add(checking);
      return true;
    }
    else if (pieces[1].equals("credit"))
    {
      CreditCard creditCard = new CreditCard(pieces[2], pieces[3], pieces[4], 0, Double.parseDouble(pieces[5]));
      account.add(creditCard);
      return true;
    }
    else
    {
      System.out.println("not sure what to put here");
      return false;
    }
  }

  else if(trans.equals("debit"))
  {
    if(findAccount(account, pieces[1]) == null)
    {

      return false;
    }
    else
    {
      Account a = findAccount(account, pieces[1]);
      double amount = Double.parseDouble(pieces[2]);
    if(Checkingacct(a) == true) 
    {
        CheckingAccount checking = (CheckingAccount) a;
        System.out.println("Balance before transaction: " + checking.getBalance());
        checking.creditAccount(amount);
        System.out.println("Transaction to account: " + amount);
        System.out.println("Balance after transaction: " + checking.getBalance() + "\n");
        return true;
    }

    else if(Creditcrd(a) == true)
    {
      CreditCard creditCard = (CreditCard) a;
      System.out.println("Balance before transaction: " + creditCard.getBalance());

      System.out.println("Transaction to account: " + amount);
      if(amount + creditCard.getBalance() > creditCard.getCreditLimit())
      { 
        System.out.println("Insufficient funds for transaction");
        return false;
      }
      else
      {
        creditCard.creditAccount(amount);
        return true;
      }
    }
    }
  }

  else if(trans.equals("credit"))
  {
    if(findAccount(account, pieces[1]) == null)
    {
      System.out.println("Print Error Message");
      return false;
    }

    else
    {
      Account a = findAccount(account, pieces[1]);
      double amount = Double.parseDouble(pieces[2]);

      if(Creditcrd(a) == true)
      {
        CheckingAccount checking = (CheckingAccount) a;
        System.out.println("Balance before transaction: " + checking.getBalance());
        checking.debitAccount(amount);
        System.out.println("Transaction to account: " + amount);
        System.out.println("Balance after transaction: " + checking.getBalance() + "\n");
        return true;
      }

      else if(Creditcrd(a) == true) 
      {
        CreditCard creditCard = (CreditCard) a;
        System.out.println(creditCard.getBalance());
        return true;
      }
    }
  }

  else if(trans.equals("report"))
  {
    return true;
  }

  return false;
 }
}

読み込もうとしているテキスト ファイルは D4.txt と呼ばれ、その中の情報は次のとおりです。

create:checking:10-3784665:Chase:Joe Holder:2000
create:credit:1234567898765432:First Card:Bob Badger:4000
create:checking:11-3478645:Dime:Melissa Martin:1000
report
debit:10-3784665:523.67
debit:1234567898765432:3500
credit:10-3784665:50
credit:11-3478645:30
debit:10-839723:200
debit:1234567898765432:600
report

2つのエラーは、印刷してerrorFile.txtまたはあなたがそれを呼び出すことを選択したもので見ることができるはずであり、何らかの理由でこの情報が処理されず、出力ファイルに印刷されないため、主な問題はここにあります。

Invalid account: debit:10839723:200
Transaction denied: debit:1234567898765432:600

コンソールに出力される情報は次のようになります。

Account Summary:

Checking account #103784665
Bank: Chase
Name on account: Joe Holder
Balance: 1526.33

Credit Account #1234567898765432
Bank: First Card
Issued to: Bob Badger
Credit Limit: 4000
Balance: 3500.00
Available credit: 500.00

Checking account #113478645
Bank: Dime
Name on account: Melissa Martin
Balance: 1030.00

End account summary.

しかし、これは問題の一部でもあります。現在、コードを実行すると、コンソールに出力される内容は

run D4 d4.txt errorFile.txt
[Ljava.lang.String;@1d540a51
[Ljava.lang.String;@b31c562
[Ljava.lang.String;@3db12bab
[Ljava.lang.String;@4ff0c6b8
[Ljava.lang.String;@4d40d320
Balance before transaction: 2000.0
Transaction to account: 523.67
Balance after transaction: 1476.33

[Ljava.lang.String;@2c9cc42e
Balance before transaction: 4000.0
Transaction to account: 3500.0
Insufficient funds for transaction
[Ljava.lang.String;@2bb07c61
[Ljava.lang.String;@483b594b
[Ljava.lang.String;@31470572
[Ljava.lang.String;@20aedee
Balance before transaction: 4000.0
Transaction to account: 600.0
Insufficient funds for transaction
[Ljava.lang.String;@2ea4aa4d

私はこれが整理すべき多くの情報であることを知っています.

4

0 に答える 0