gpt4 book ai didi

java - 使用另一个类创建新对象

转载 作者:行者123 更新时间:2023-12-01 11:52:10 24 4
gpt4 key购买 nike

好吧,我终于完成了我的作业,并通过使用右键单击“新帐户”等创建对象来测试它,这一切都工作正常,从我可以看到父类(super class)和子类都正确链接,但是我的工作是使用名为 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

帐户

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

个人帐户

/**
* 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();

}
}

最佳答案

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

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

关于java - 使用另一个类创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28710870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com