我正在尝试通过toString()打印一个数组,所以我可以将它调用到另一个方法。我究竟做错了什么?为什么不编译,什么是更好的解决方案。
public class Applicants
{
private String applicant[];
public Applicants()
{
Application student1 = new Application()
Application student2 = new Application()
Application student3 = new Application()
Application student4 = new Application()
Application student5 = new Application()
Application student6 = new Application();
Application applicant[] = new Application[5];
applicant[0] = student1;
applicant[1] = student2;
applicant[2] = student3;
applicant[3] = student4;
applicant[4] = student5;
applicant[5] = student6;
for (int index = 0; index < applicant.length; index++)
{
System.out.println(applicant[index]);
}
}
public String toString(String[] applicant)
{
String output = new String();
String total;
for (int index = 0; index < applicant.length; index++)
{
total = System.out.println(applicant[index]);
}
return total;
}
}
答案 0 :(得分:0)
有三件事错误,一件“嘿,注意”。
您正在隐藏构建器内部的applicant
字段。这意味着当您完成构造函数后,String[]
为{{ 1}}。尚未满null
,只有null
。
您可能要做的是将null
声明为您的字段,然后不在构造函数内重新声明它。
private Application[] applicant
不是有效的声明。您无法将total = System.out.println(applicant[index]);
方法的结果分配给任何内容。你在构造函数中使用它是正确的,所以你在这里没有弄清楚它是令人惊讶的。
void
不接受任何争论。使用您的字段。
请在toString
对象上定义toString
,因为这会让您的生活更轻松。否则,从该对象中提取有意义的信息。在任何一个事件中你都要对这个进行一些字符串连接,我将其作为练习留给读者。
答案 1 :(得分:0)
您需要在Application类中声明toString方法:
public class Application {
@Override
public String toString() {
// your code here
}
}
请注意使用覆盖注释。这将使编译器检查您实际上是否覆盖了您所说的方法 - 在当前代码中,您不是因为toString不接受任何参数。
至于toString的实现,我会选择Google Guava
@Override
public String toString() {
return MoreObjects.toStringHelper(this.getClass()).add(..).add(..).toString();
}
有关详细信息,请参阅此处:https://code.google.com/p/guava-libraries/wiki/CommonObjectUtilitiesExplained