【问题标题】:how to return all players in specific football club如何返回特定足球俱乐部的所有球员
【发布时间】:2018-11-13 19:36:46
【问题描述】:

我对 IT 或 Stack Overflow 并不陌生,但对 java+oop 很陌生,所以如果语法不正确,请见谅, 我正在尝试快速升级 Java,并且需要帮助我正在改进的项目。

我正在尝试重新创建最基本版本的足球经理,到目前为止,有一个“俱乐部”类和一个“球员”类,我已经创建了一些具有自己属性和价值观的俱乐部,现在将喜欢将球员分配到每个俱乐部。我在每个类中都有一个构造函数,它将为每个俱乐部和球员创建单独的对象,所以当我创建 Marcus Rashford 时,它看起来像这样..

Player MarcRash = new Player("Marcus", "Rashford", "CF", 10, 20, Mutd);

Mutd,是我之前创建的一个 Club 对象。

10 是他的球衣号码, 20岁是他的年龄//不重要

问题: 如何在我的 Club 类中创建一个方法来列出当前分配给每个俱乐部的所有球员?

ie:所有当前与创建它们的最后一个参数具有相同对象的玩家?

void listPlayers(Club club) {
 //something here
}

感谢您的帮助。

【问题讨论】:

  • please forgive me if the syntax is not correct 您应该做的第一件事是通过编译器运行您的代码并确保语法正确。在正式语言中,语法决定语义,如果您的语法不正确,我们无法判断您想说什么。
  • @markspace 到目前为止,编译器不是问题,到目前为止,我的代码正在按预期工作,我的意思是我缺乏词汇来表达我真正想要的......在读回我的帖子后一两次我希望我能被理解
  • Club 类的方法不需要 Club 作为参数。
  • 你的意思是Mutd 是最后一个参数,它是Object 对吗? @Override 该类中的.equals() 方法并比较它们,或者如果Mutd 只是一个字符串,它们会比较它,尝试用简单的示例更新代码,以便更容易理解
  • @SeanDavey 没关系。我只是说您似乎对软件开发不熟悉,没有什么比明显的语法错误更能使试图帮助您的人感到沮丧。至少要确保语法正确。

标签: java class oop


【解决方案1】:

对我来说,您的解决方案似乎“颠倒了”。与其创建具有固定俱乐部的球员,不如创建一个没有俱乐部的球员,然后将他们分配到一个俱乐部。

Player marcRash = new Player("Marcus", "Rashford", "CF", 10, 20 );
mutd.add( marcRash );

在使用 Java 编程时,请遵循 Java 的编码指南。 marcRushmutd 等变量名称以小写字母开头。

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();
  }
}

【讨论】:

  • 是的,不要将“俱乐部”属性分配给玩家。球员应该包含在 Club 对象中。
  • 完美运行,非常感谢。你是对的,将球员固定到俱乐部是错误的,球员应该被分配到俱乐部对象。也感谢关于变量命名约定的反馈,我知道,但没有在这里使用。
【解决方案2】:

您可以像这样为 Club 对象创建一个列表

https://docs.oracle.com/javase/8/docs/api/java/util/List.html

List&lt;Player&gt; players; 在您的构造函数中,您将每个玩家添加到列表中。 这种类型的结构将允许您拥有与俱乐部相关的所有球员

然后你可以构建你的方法来打印列表中的每个对象

List<Player> listPlayers(Club club) { //Loop through the elements on the list // print each Player }

【讨论】:

    【解决方案3】:

    听起来您需要一个名为 League 的 Club 类容器。然后 League 类可能包含一个方法,该方法将 Club 对象作为参数并调用 Club 类中的方法以返回其实例中的所有玩家(假设,无论出于何种原因,您需要 League 类中可用的此 API) .

    俱乐部的球员将包含在 Club 类的 HashSet 中。所以 Club 类中的类变量将是: HashSet&lt;Player&gt; players;.

    只是一个注释。我会使用 HashSet(而不是 ArrayList)来防止同一俱乐部中出现重复的球员——这在现实世界中是不可能的。但是为了使用 HashSet,包含的元素(Player)需要实现 equalshashCode 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多