与数组列表和toString方法有关

时间:2016-02-16 03:27:44

标签: java arrays list

我目前正在参加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

如何让代码打印出所有已添加的交易?

谢谢,所有的帮助表示赞赏。

1 个答案:

答案 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")));

希望这有帮助。