我目前正在参加Java AP计算机科学课程,我们需要完成一项可以执行以下操作的活动:
TransactionHistory类用于跟踪一系列事务。通过提供toString方法的主体来完成此类的以下定义,该方法返回一个多行字符串,该字符串由每个事务的toString方法的输出组成,每个字符串都在一个新行上。 (回想一下,通过包含" \ n"来将字符串分成多行。) 但是要小心,以确保您的toString方法不返回以换行符结尾的String。为了帮助您,我们提供(幕后)showNewlines方法供您在测试toString方法时使用。检查提供的测试用例插入的代码,看看它是如何使用的。
到目前为止,我有以下代码:
public class TransactionHistory extends ArrayList<Transaction>
{
public String toString()
{
for (Transaction t : this) {
return t.toString();
}
return "";
}
}
这是我们需要使用的测试用例之一:
public static void main( String[] args )
{
TransactionHistory th = new TransactionHistory();
th.add( new Deposit( 100.0, "10:15", "10/23/2007" ) );
th.add( new Deposit( 2.35, "11:05", "9/21/2007" ) );
th.add( new Withdrawal( 50.0, "2:24", "11/1/2007" ) );
System.out.println( showNewlines( th.toString() ) );
}
使用我目前的代码,它所能做的就是打印出第一行交易。
以下是打印出来的内容:
Deposit 100.0 10:15 10/23/2007
如何让代码打印出所有已添加的交易?
谢谢,所有的帮助表示赞赏。
答案 0 :(得分:1)
您的return
语句正在打破循环,因为它已经返回第一个Transaction
:
for (Transaction t : this) {
return t.toString();
}
使用StringBuilder
附加每个,然后返回StringBuilder#toString()
要小心,问题表明你的toString()不会返回以NEWLINE CHARACTER结尾的字符,这本身就是一个不同的故事。
substring(int beginIndex, int endIndex)
和lastIndexOf(String str)
应该注意这一点。
String a = "foo\nbar\n";
System.out.println(a.substring(0, a.lastIndexOf("\n")));
希望这有帮助。