好的,所以我终于完成了我的任务,并通过右键单击"新帐户"创建对象来测试它。等,这一切都运行良好,从我可以看到超级类和子类都正确链接,但我的工作是使用名为HW2的测试类测试的,当我运行它时应该创建一些帐户并打印他们的详细信息到终点站。然而,输出缺少了大量的东西,而不是它应该看起来像什么,基本上我想知道为什么测试脚本没有正确创建对象。我发布了很多代码,但我认为问题只在于构造函数。
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();
}
}
答案 0 :(得分:1)
您的toString方法不完整。您可以看到测试套件基本上是实例化类并打印它。 Account toString(也可能是PersonalAccount)需要在右侧窗口中返回内容,其中不仅包含名称。
而不是return name.toString();
,您需要更像return name.toString() + "\n" + otherField.toString();