我看不出为什么这段代码给我错误无法找到方法打印一切看起来对我好,而且我已经检查了拼写错误的代码,并尝试了一个基本上做同样的不同版本事情,但他们被称为学生而不是被称为帐户的东西。忽略评论,因为我没有改变它们
import java.util.*;
public class AccountList
{
private ArrayList < Account > accounts;
/**
* Create a LabClass with no limit on number of enrolments.
* All other details are set to default values.
*/
public AccountList()
{
accounts = new ArrayList < Account >();
}
/**
* Add a account to this LabClass.
*/
public void addAccount(Account newAccount)
{
accounts.add(newAccount);
}
/**
* Return the number of accounts currently enrolled in this LabClass.
*/
public int getNumberOfAccounts()
{
return accounts.size();
}
/**
* Print out a class list with other LabClass
* details to the standard terminal.
*
* Method uses a for .. each loop
*/
public void getAllAccounts()
{
for(Account account : accounts)
{
**account.print();**
}
System.out.println("Number of accounts: " + getNumberOfAccounts());
}
/**
* Print out details of a account
* @param accountEntry The entry in the list
*/
public void getAccount(int accountEntry)
{
if(accountEntry < 0)
{
System.out.println("Negative entry :" + accountEntry);
}
else if(accountEntry < getNumberOfAccounts())
{
Account account = accounts.get(accountEntry);
System.out.print(account);
}
else
{
System.out.println("No such entry :" + accountEntry);
}
}
/**
* removes a account from the list
* @param accountEntry The entry in the list
*/
public void removeAccount(int accountEntry)
{
if(accountEntry < 0)
{
System.out.println("Negative entry :" + accountEntry);
}
else if(accountEntry < getNumberOfAccounts())
{
accounts.remove(accountEntry);
}
else
{
System.out.println("No such entry :" + accountEntry);
}
}
/**
* removes a account from the list
*
* @param aAccount the account to remove
*/
public void removeAccount(Account aAccount)
{
accounts.remove(aAccount);
}
}
答案 0 :(得分:2)
这里似乎缺少一些基本概念。
首先:你没有“默认”.print()
方法;也就是说,基本的,简单的Java类Object
没有.print()
方法。
第二:即使它有,你还期望它做什么?你想在哪里打印,你想要它打印什么?第一个问题(在哪里)由专门执行输出职责的类(例如PrintStream
)回答,第二个问题(什么)通过实施您的班级“.toString()
来回答。
由于你Account
课程显然不是专门负责输出职责的课程,你需要做两件事:
Account
班级覆盖.toString()
; System.out
,它恰好是PrintStream
,它实现了.print()
方法。看到您的代码,您似乎拥有.printAccountDetails()
方法;这与德米特的启动者规则相矛盾;并注意它如何使用System.out
。
此外,.print()
(.println()
中的PrintStream
和System.out
之间的差异是,如果您使用“{{1}},则新行将附加到输出版本“; custom对于大多数基于文本的输出通道,它也会触发底层OS库的输出刷新。