使用另一个类创建新对象

时间:2015-02-25 03:59:26

标签: java class object relationship

好的,所以我终于完成了我的任务,并通过右键单击"新帐户"创建对象来测试它。等,这一切都运行良好,从我可以看到超级类和子类都正确链接,但我的工作是使用名为HW2的测试类测试的,当我运行它时应该创建一些帐户并打印他们的详细信息到终点站。然而,输出缺少了大量的东西,而不是它应该看起来像什么,基本上我想知道为什么测试脚本没有正确创建对象。我发布了很多代码,但我认为问题只在于构造函数。

enter image description here

enter image description here

RUNHW2

/**
 * Class to test CG0048 Homework 2
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class RunHW2
{    
    private String name, id;
    private AccountList accounts;
    private PersonalAccount pa1, pa2;
    private TradeAccount ta1, ta2;

    /**
     * Constructor for objects of class HW2Test
     * 
     * @param name the student's name
     * @param id the student's id
     */
    public RunHW2(String name, String id)
    {
        this.name = name;
        this.id = id;

        accounts = new AccountList();        
        runTests();
    }

    /**
     * Run the various tests
     */

    public void runTests()
    {
        // print header
        System.out.println("Name: " + name + "\tID: " + id + "\n");

        testAddPersonalAccountNoPoints();
        testAddPersonalAccountWithPoints();
        testAddTradeAccountNoPoints();
        testAddTradeAccountWithPoints();      

        System.out.println("Student should now print out the contents of the terminal window."); 

    }


    /**
     * Create 2 Personal Accounts 
     */

    public void testAddPersonalAccountNoPoints()
    {
        try
        {
            // personal account with no initial points
            pa1 = new PersonalAccount ("Ann", "Archer","1000", 
                                          "1 Amble Way", "Amble", "AA1 1AA",
                                          "1111111111111111", 'D');
            accounts.addAccount(pa1);
            System.out.println(pa1);                
        }
        catch (Exception e)
        {
            System.out.println("An exception was raised in " 
                   + "testAddPersonalAccountNoPoints.");
        }
    }

    public void testAddPersonalAccountWithPoints()
    {
        try
        {
            // personal account with additional points
            pa2 = new PersonalAccount ("Barbara", "Bach","1001",
                                          "2 Blyth Boulevard", "Blyth", "BB2 2BB",
                                          "2222222222222222", 'M', 20);
            accounts.addAccount(pa2);
            System.out.println(pa2);            
        }
        catch (Exception e)
        {
            System.out.println("An exception was raised in testAddPersonalAccountWithPoints.");
        }
    }

    public void testAddTradeAccountNoPoints()
    {
        try
        {
            // trade account with no initial points
            ta1 = new TradeAccount ("Colin", "Cowdry","1002", 
                                "3 Consett Crescent", "Consett", "CC3 3CC",
                                "Cowdry Construction",
                                "33 Chopwell Close", "Chopwell", "CD3 3CD",
                                "GB333333");

            accounts.addAccount(ta1);                    
            System.out.println(ta1);              
        }
        catch (Exception e)
        {
            System.out.println("An exception was raised in testAddTradeAccountNoPoints.");
        }
    }

    public void testAddTradeAccountWithPoints()
    {
        try
        {
            // trade account with initial points
            ta2 = new TradeAccount ("Dave", "Dee","1004",
                                "4 Durham Dwellings", "Durham", "DD4 4DD",
                                "Dee Design", 
                                "44 Darlington Drive", "Darlington", "DE4 4DE",
                                "GB444444", 40);
            accounts.addAccount(ta2);                   
            System.out.println(ta2);            
        }
        catch (Exception e)
        {
            System.out.println("An exception was raised in testAddTradeAccounts.");
        }
    }
} // end class

ACCOUNT

public class Account 
{
    private String accountNumber;
    private Address address;
    private Name name;
    private int pointsHeld;

    /**
     * Constructor for objects of class Account.
     * The number of pointsHeld should be set to zero.
     * 
     * @param firstName The Account Holder's first name 
     * @param lastName The Account Holder's last name
     * @param accNumber The Account Holder's account number
     * @param street the account holder's street
     * @param town the account holder's town
     * @param postcode the account holder's postcode
     */
    public  Account (String fName, String lName, String accNumber,
    String street, String town, String postcode)
    {
        name = new Name(fName, lName);
        accountNumber = accNumber;
        pointsHeld = 0;       
        address = new Address(street, town, postcode);
    }

    /**
     * Constructor for objects of class Account.
     * The number of pointsHeld should should be set to
     * the supplied value.
     * 
     * @param fName The Account Holder's first name 
     * @param lName The Account Holder's last name
     * @param acctNumber The account number
     * @param thePoints the pointsHeld awarded when account is initialised
     * @param street the account holder's street
     * @param town the account holder's town
     * @param postcode the account holder's postcode
     */
    public Account(String fName, String lName, String acctNumber, int points,
    String street, String town, String postcode)
    {
        name = new Name(fName, lName);
        accountNumber = acctNumber;
        pointsHeld = points;     
        address = new Address(street, town, postcode);
    }

    // accessors

    /**
     * Increase the number of points held by a given number
     * and output a message to the console window giving 
     * the revised number of points held.
     * 
     * @param number of points to add to total
     */
    public void addPoints(int points)
    {
        pointsHeld = pointsHeld + points;
        System.out.println("Points now held: " + pointsHeld);        
    }

    public boolean equals (Object o)
    {
        if ( o == null ) 
            return false;

        if ( !this.getClass().equals(o.getClass()) )
            return false;

        else 

            return true;

    }

    /**
     * Get the Account Holder's account Number
     * 
     * @return the Account Holder's account number
     */
    public String getAccountNumber()
    {
        return accountNumber;
    }

    /**
     * Return the account holder's address
     * 
     * @return the account holder's address
     */
    public String getAddress()
    {
        return address.toString();
    }

    /**
     * Get the Account Holder's first name
     * 
     * @return the Account Holder's first name
     */
    public String getFirstName()
    {
        return name.getFirst();
    }

    /**
     * Get the Account Holder's last name
     * 
     * @return the Account Holder's last name
     */
    public String getLastName()
    {
        return name.getLast();
    }

    /**
     * Get the number of points held
     * 
     * @return the number of points held
     */
    public int getNoOfPoints()
    {
        return pointsHeld;
    }

    /**
     * Print out the Account Holder's details to the console window
     * 
     */
    public void printAccountDetails()
    {
        System.out.println ("Personal Account:" + accountNumber + " " + name.getFirst() + " " +
        name.getLast());

        System.out.println (address.toString());

        System.out.println ("Points Held:" + pointsHeld);


    }     

    /**
     * Remove pointsHeld by a given number and output a 
     * message to the console window giving the revised number 
     * of points held as long as the number of points would 
     * not fall below zero
     * - otherwise output message to console window instead.
     * 
     * @param number of pointsHeld to remove total.
     * 
     */
    public void removePoints (int points)
    {
        if ((pointsHeld - points) >=0)
        {
            pointsHeld = pointsHeld - points;
            System.out.println("Points now held: " + pointsHeld);        
        }
        else
        {
            System.out.println("Transaction refused: "
                + "Insufficient points available.");
        }
    }

    // mutators     

    /**
     *  Change the account holder's address
     *  
     *  @param street the street
     *  @param town the town
     *  @postcode the postcode
     */
    public void setAddress(String street, String town, String postcode)
    {
        address.setFullAddress(street, town, postcode);
    }

    /**
     * Change the first name
     * 
     * @param fName the new first name
     * 
     */
    public void setFirstName(String fName)
    {
        name.setFirst(fName);
    }

    /**
     * Change the last name
     * 
     * @param lName the new last name
     * 
     */
    public void setLastName(String lName)
    {

        name.setLast(lName);

    }

    public String toString() 
    {

        return name.toString();

    }

} // end class

PERSONALACCOUNT

/**
 * Write a description of class PersonalAccount here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class PersonalAccount extends Account
{
    // instance variables - replace the example below with your own
    private String cardNumber;
    private char cardType;

    /**
     * Constructor for objects of class PersonalAccount
     */

    public PersonalAccount (String firstName, String lastName, String accountNumber, 
    String street, String town, String postcode, String cardNumber, char cardType)
    {

        super(firstName,lastName,accountNumber,street,town,postcode);
        this.cardType = cardType;
        this.cardNumber = cardNumber;

    }

    public PersonalAccount(String firstName, String lastName, String accountNumber, 
    String street, String town, String postcode, String cardNumber, char cardType, int points)
    {
        super(firstName,lastName,accountNumber,street,town,postcode);

        this.cardType = cardType;
        this.cardNumber = cardNumber;
        super.addPoints(points);

    }


    public String getCardNumber() 
    {

        String input = cardNumber;

        StringBuilder result = new StringBuilder();
        for (int i = 0; i < input.length(); i++) {
           if (i % 4 == 0 && i != 0) {
              result.append(" ");
            }

           result.append(input.charAt(i));
        }

        return result.toString();


    }


        public String getCardType() 
        {
            if (cardType == 'D') {
                return "Debit";
            }
            else if (cardType == 'M') {
                return "Mastercard";
            }
            else 
                return "Visa";

        }

        public void print () 
        {

            super.printAccountDetails();
            System.out.println("Card Number:"+getCardNumber() + " Card Type: " + getCardType());

        }

        public String toString() 
        {
            return super.toString();

        }
    }

1 个答案:

答案 0 :(得分:1)

您的toString方法不完整。您可以看到测试套件基本上是实例化类并打印它。 Account toString(也可能是PersonalAccount)需要在右侧窗口中返回内容,其中不仅包含名称。

而不是return name.toString();,您需要更像return name.toString() + "\n" + otherField.toString();

的内容