我有以下Team类:
import java.util.ArrayList;
import java.util.Random;
public class Team {
private String name;
private int noOfTeams;
public ArrayList<Team> teamList;
//no-arg constructor, creates the array list of default teams
Team(){
this.teamList = new ArrayList<Team>();
teamList.add(new Team("Brondby IF"));
teamList.add(new Team("AaB"));
teamList.add(new Team("Viborg FF"));
teamList.add(new Team("Esbjerg"));
teamList.add(new Team("FC Copenhagen"));
teamList.add(new Team("Randers FC"));
teamList.add(new Team("FC Midtjylland"));
teamList.add(new Team("FC Nordsjaelland"));
teamList.add(new Team("Odense BK"));
teamList.add(new Team("AGF Aarhus"));
teamList.add(new Team("FC Vestsjaelland"));
teamList.add(new Team("Sonderjyske"));
}
//constructor using name
Team(String name){
this.name =name;
}
//get name of team
public String getName(){
return name;
}
//get the size of the arrayList
public int getSize(){
return teamList.size();
}
//get an element at a specific index i
public Team getIndex(int i){
return teamList.get(i);
}
和一个客户端(测试)类,我尝试使用上面定义的ArrayList
方法在getIndex()
中的第二个位置(例如)打印元素:
public class TestTeam {
public static void main(String[] args){
Team teamList = new Team();
System.out.print(teamList.getIndex(2));
}
}
以上是给我的职位:Team@45a1472d
。我尝试使用:
System.out.print((teamList.getIndex(2)).toString());
但结果相同。当我调试它时,teamList.getIndex(2)
的值似乎为空。我无法看到Team类中的方法出错了什么,感谢任何提示/帮助。
答案 0 :(得分:3)
您必须在toString()
课程中使用Team
方法。否则,它将调用Object#toString()
方法。
现在它正在打印Object
类toString()
方法的默认实现,该方法的实现方式是给出对象哈希码的无符号十六进制表示。
public class Team {
@Ovveride
public String toString() {
//build a string for team class to print and return here.
}
}
答案 1 :(得分:2)
主要问题是您的计划结构已关闭:团队不应包含ArrayList<Team>
。 ArrayList应该驻留在另一个类中,比如League或TeamList类。您可能会遇到使用当前代码进入StackOverflowException的风险。
修改强>
你问:
在你的建议中,TeamList / ArrayList类应该是Team的子类吗?如果我像现在这样保持风险,你能成为一个更具体的风险吗?
不,它绝对不应该是一个子类。从逻辑上考虑一下:棒球联赛不是一支特殊类型的棒球队,是吗?不,所以你对子类的想法不满足子类化的“is-a”规则。它应该是它自己的类,它有自己的非静态方法和字段。