一般来说,我对IT或Stack溢出并不陌生,但我对java+oop并不熟悉,所以如果语法不正确,请原谅我,我正试图在java中快速升级,并且需要我正在努力改进的项目的帮助。
我正在尝试重建最基本版本的足球教练,到目前为止,我有一个“俱乐部”级和一个“球员”级,我创建了几个俱乐部,有自己的属性和价值观,现在想把球员分配给每个俱乐部。我在每个类中都有一个构造函数,它将为每个俱乐部和球员创建单独的对象,所以当我创建Marcus Rashford时,它看起来是这样的。
Player MarcRash = new Player("Marcus", "Rashford", "CF", 10, 20, Mutd);穆特,是我之前创建的一个俱乐部对象。
10是他的衬衫号码,20是他的年龄//不重要
问:如何在我的Club类中创建一个方法来列出当前分配给每个俱乐部的所有球员?
ie:目前所有的玩家在创建他们的过程中都有相同的对象作为最后一个参数?
void listPlayers(Club club) {
//something here
}谢谢你的帮助。
发布于 2018-11-13 19:46:57
你的解决方案在我看来是“倒置”的。不要用固定的俱乐部来创造球员,你应该创造一个没有俱乐部的球员,然后把他们分配给一个俱乐部。
Player marcRash = new Player("Marcus", "Rashford", "CF", 10, 20 );
mutd.add( marcRash );在用Java编程时,也请遵循Java的编码准则。像marcRush和mutd这样的变量名以小写字母开头。
在Club中,您只需列出已添加的球员。
public class Club {
private ArrayList<Player> members = new ArrayList<>();
public void add( Player player ) {
members.add( player );
}
public String listMemebers() {
if( members.size() == 0 ) return "";
StringBuilder sb = new StringBuilder();
for( Player p : members ) {
sb.append( p.getFirstName() );
sb.append( " " );
sb.append( p.getLastName() );
sb.append( ", " );
}
sb.setLength( sb.length()-2 );
return sb.toString();
}
}发布于 2018-11-13 19:46:07
听起来你需要一个叫做联赛的俱乐部类的容器。然后,League类可能包含一个方法,该方法接受Club对象作为参数,并在Club类中调用一个方法来返回其实例中的所有球员(假设,出于任何原因,您需要联赛类中可用的API )。
俱乐部的球员将包含在俱乐部班级的HashSet中。因此,俱乐部类中的一个类变量是:HashSet<Player> players;。
不过只是一张纸条。我会用HashSet (而不是ArrayList)来防止在同一个俱乐部重复的球员--这在现实世界里是不可能的。但是为了使用HashSet,包含的元素(Player)需要实现equals和hashCode方法。
发布于 2018-11-13 19:50:05
您可以为Club对象创建如下列表
https://docs.oracle.com/javase/8/docs/api/java/util/List.html
List<Player> players;,并在构造函数中将每个玩家添加到列表中。这种结构可以让你拥有所有与俱乐部相关的球员。
然后,您可以构建方法来打印列表中的每个对象。
List<Player> listPlayers(Club club) { //Loop through the elements on the list // print each Player }
https://stackoverflow.com/questions/53288328
复制相似问题