简体   繁体   中英

How do I look for a record in an array and then update the balance?

Part4: Read a String aName, an int aPin, a double aWithdraw, and a double aDeposit. Then search in anotherArray to find a customer record with name equal to aName and pin equal to aPin. If the record is found, do the withdrawal and deposit transactions using aWithdraw and aDeposit amounts and update the record's balance. Otherwise print an error message. This process can be repeated for other transactions on other records. I've done a little bit, I'm getting a error on the 'if statement'.

Part5: Write the customer records from anotherArray in the binary file customer_records.dat after updating the customer records.

Please Help! I would really appreciate it!

  import java.io.Serializable;
  import java.util.Scanner;

/**
 Serialized class for data on endangered species.
 Includes a main method.
*/
public class CustomerRecord implements Serializable
{
private String name;
private int pin;
private int account;
private static double balance;

public CustomerRecord( )
{
    name = null;
    pin = 0;
    account = 0;
    balance = 0.00;
}

public CustomerRecord(String initialName, int initialPin, int initialAccount, double initialBalance)
{
    name = initialName;

    if (initialPin >= 1111 && initialPin <= 9999)
            pin = initialPin;
    else
    {
            System.out.println("ERROR: Pin is not acceptable.");
            System.exit(0);
    }

if (initialAccount >= 400111 && initialAccount <= 500111)
        account = initialAccount;
else
{
    System.out.println("ERROR: Account number is not acceptable.");
            System.exit(0);
}

if (initialBalance >= 0)
        balance = initialBalance;
else
{
    System.out.println("ERROR: Initial Balance is not acceptable.");
            System.exit(0);
}
}

public String toString()
{
    return ("Name = " + name
            + "  Account = " + account
    + "  Balance = " + "$" + balance + "\n");
}

public void setCustomerRecord( )
{
    Scanner keyboard = new Scanner(System.in);
    System.out.println("\nEnter new customer's name: ");
    name = keyboard.nextLine( );

    System.out.println("Enter new customer's pin: ");
    pin = keyboard.nextInt( );
    while (pin < 1111 || pin > 9999)
    {
        System.out.println("Pin should be in the range of 1111-9999.");
        System.out.println("Reenter pin:");
        pin = keyboard.nextInt( );
    }

    System.out.println("Enter new customer's account no: ");
account = keyboard.nextInt( );
    while (account < 400111 || pin > 500111)
    {
        System.out.println("Account should be in the range of 400111-500111.");
        System.out.println("Reenter account number:");
        account = keyboard.nextInt( );
    }

System.out.println("Enter new customer's initial balance: ");
    balance = keyboard.nextDouble( );
while (balance < 0)
    {
        System.out.println("Initial balance should be positive or zero.");
        System.out.println("Reenter initial balance:");
        balance = keyboard.nextDouble( );
    }
}

public void writeOutput( )
{
     System.out.print("Name = " + name + "\t");
     System.out.print("Account = " + account + "\t");
     System.out.print("Balance = " + "$" + balance + "\n");
}

public String getName( )
{
    return name;
}

public int getPin( )
{
    return pin;
}

public int getAccount( )
{
    return account;
}



public void setBalance(double amount)
{
    balance = amount;
}

public static void deposit(double aDeposit)
{
balance = balance + aDeposit;
}
public static void withdraw(double aWithdraw)
{
    if 
    ( balance >= aWithdraw)
        balance = balance - aWithdraw;
    else if
    ( balance < aWithdraw)
        System.out.println("Cannot withdarw amount.");
    return;
}
     public double getBalance( )
   {
    return balance;
}
public boolean equal(CustomerRecord otherObject)
{
    return (name.equalsIgnoreCase(otherObject.name) &&
           (pin == otherObject.pin) &&
           (account == otherObject.account) &&
           (balance == otherObject.balance));
}
 }

import java.io.FileInputStream;
    import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
   import java.util.Scanner;

 public class BankCustomers
   {
public static void main(String[] args)
{   
    //----------------------------------------------------------------

    //part1: Create array of customer records and write them 
    //in the file customer_record.dat


    CustomerRecord[] oneArray = new CustomerRecord[100];
    oneArray[0] = new CustomerRecord("John Gray", 2222, 400222, 10000.00);
    oneArray[1] = new CustomerRecord("Ann Black", 3333, 400333, 1500.00);
    oneArray[2] = new CustomerRecord("Mary White", 4444, 400555, 16500.00);
    oneArray[3] = new CustomerRecord("Jack Green", 7777, 400888, 100.00);

    int index = 4;

    String fileName = "customer_records.dat";
    System.out.println("---Open file: " + fileName);
    System.out.println("---Customer records written to file: " + fileName);
    System.out.println("---Close file: " + fileName);
    try
    {
        ObjectOutputStream outputStream =
              new ObjectOutputStream(
                  new FileOutputStream(fileName));
        outputStream.writeObject(oneArray);
        outputStream.close( );
    }
    catch(IOException e)
    {
        System.out.println("Error writing to file " +
                            fileName + ".");
        System.exit(0);
    }
    System.out.println("\n");


    //-------------------------------------------------------------------
    //Part2: Read from the file customer_record.dat and save 
    //the customer records in anotherArray


    System.out.println("---Open file: " + fileName);
    System.out.println("---Customer records read from file: " + fileName);
    System.out.println("---Close file: " + fileName);
    CustomerRecord[] anotherArray = null;
    try
    {
        ObjectInputStream inputStream = 
                   new ObjectInputStream(
                           new FileInputStream(fileName));
        anotherArray = (CustomerRecord[])inputStream.readObject( );
        inputStream.close( );
    }
    catch(Exception e)
    {
        System.out.println("Error reading file " + 
                            fileName + ".");
        System.exit(0);
    }
            //Print the records on screen
    for (int i = 0; i < index; i++)
        System.out.print(anotherArray[i]);


    //------------------------------------------------
    //Part3: Add a new customer record to anotherArray

    anotherArray[index] = new CustomerRecord();
    anotherArray[index].setCustomerRecord();
    index++;
            //Print the records on screen
    for (int i = 0; i < index; i++)
        System.out.print(anotherArray[i]);


    //------------------------------------------------
    //Part4: Find a customer record from anotherArray 
    //to do transaction(s) and update the record's balance

    char repeat; // User control to repeat or quit


    do{   


        System.out.println("Enter the name");
        String aName;
        Scanner keyboard = new Scanner(System.in);
        aName = keyboard.nextLine();

        System.out.println("Enter the pin");
        int aPin;
        aPin = keyboard.nextInt();


        System.out.println("Enter the amount you wish to withdraw");
        double aWithdraw;
        aWithdraw = keyboard.nextDouble();
        CustomerRecord.withdraw(aWithdraw);

        System.out.println("Enter the amount you wish to deposit");
        double aDeposit;
        aDeposit = keyboard.nextDouble();
        CustomerRecord.deposit(aDeposit);

             for
             (int i = 0; i < anotherArray.length; i++) {
              CustomerRecord record = anotherArray[i];
              if
              ((record.getName().equalsIgnoreCase(aName)) && (record.getPin() == (aPin)))
    {


                System.out.println(record);
                record.getBalance();

              }

              }


        System.out.println("\nAnother Transaction? (y for yes)");
        repeat = keyboard.next().charAt(0);

    }
    while
        (

         repeat == 'y' || repeat == 'Y') ;

        //Print the records on screen

    { for (int i = 0; i < index; i++)
        System.out.print(anotherArray[i]);
    }


    //------------------------------------------------
    //Part5: Write the customer records from anotherArray 
    //in the file customer_record.dat 

    String fileName1 = "customer_records.dat";
    System.out.println("---Open file: " + fileName1);
    System.out.println("---Customer records written to file: " + fileName1);
    System.out.println("---Close file: " + fileName1);
    try
    {
        ObjectOutputStream outputStream =
              new ObjectOutputStream(
                  new FileOutputStream(fileName1));
        outputStream.writeObject(anotherArray);
        outputStream.close( );
    }
    catch(IOException e)
    {
        System.out.println("Error writing to file " +
                            fileName1 + ".");
        System.exit(0);
    }
    System.out.println("\n");

    //End of program
    System.out.println("\n---End of program.");
}
}       

Edit
Error message:
Exception in thread "main" java.lang.NullPointerException at BankCustomers.main(BankCustomers.java:115)

The cause of your exception is that you are writing an array of length 100 to file, even though it is not entirely full:

CustomerRecord[] oneArray = new CustomerRecord[100];

Then you read that back into an array:

anotherArray = (CustomerRecord[])inputStream.readObject( );

Now this array contains 5 real records (since you create one in part 3), but the array size is 100. So when you loop through the entire length of the array:

for (int i = 0; i < anotherArray.length; i++) {

and call record.getName() or record.getPin() , on records 6, 7, 8, ... 100 you are getting a NullReferenceException because those records don't exist. I think you want to loop to i < index like you do in part 3.

This is really no surprise here - you are first doing this:

CustomerRecord[] oneArray = new CustomerRecord[100];
oneArray[0] = new CustomerRecord("John Gray", 2222, 400222, 10000.00);
oneArray[1] = new CustomerRecord("Ann Black", 3333, 400333, 1500.00);
oneArray[2] = new CustomerRecord("Mary White", 4444, 400555, 16500.00);
oneArray[3] = new CustomerRecord("Jack Green", 7777, 400888, 100.00);

Then you create one by hand (all well and good), but then you try to iterate through the ENTIRE set of customers!

oneArray[0] = 'John Gray';
oneArray[1] = 'Ann Black';
oneArray[2] = 'Mary White';
oneArray[3] = 'Jack Green';
oneArray[4] = 'WHowever you made up';
oneArray[5] to oneArray[99] = NULL;

BAM, you get a NullPointerException when trying to get the pin and name.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM