2017-02-22 151 views
2

因此,我试图创建一个构建橄榄球队对象的类,但我不太确定数组实际上是如何作为字段工作的。我的构造是这样的:如何在其中一个字段是数组的类中创建构造函数(Java)

public class FootballTeam { 
private String[] players; 
private String colour; 
private int goalDifference; 
private Boolean challengeTrophy; 

//---------- Construction and Initialisation of the FootballTeam object---------- // 
public FootballTeam(String[] aPlayer, String aColour, int aGoalDifference, Boolean inChallengeTrophy) { 
    for (int i = 0; i < 5; i++) {players[i] = aPlayer[i]} 
    colour = aColour; 
    goalDifference = aGoalDifference; 
    challengeTrophy = inChallengeTrophy; 
} 

我真的不知道怎么去写构造器,这样我可以只使用一个字符串数组来测试玩家的一部分。

我还必须创建方法,允许添加或删除新玩家,我不确定我会如何构造它,任何帮助将不胜感激;干杯!

+2

为什么不简单'玩家= aPlayer'?两者都是字符串类型的数组,因此您可以在没有for循环的情况下为它们分配 – mammago

回答

0

是的,你做得对。但不是使用for循环来使两个数组相同,您可以放置​​“players = aPlayer;”。

3

你可以:

this.players = aPlayer; 

如果你要复制数组的内容(如你在for循环做的),你需要先初始化球员。

this.players = new String[numberOfFields]; 
+1

** note **,在此情况下,this是可选的。 –

0

下面是代码:

import java.util.Arrays; 
import java.util.HashSet; 
import java.util.Set; 

public class FootballTeam { 
    private Set<String> players; 
    private String colour; 
    private int goalDifference; 
    private Boolean challengeTrophy; 

    public FootballTeam(String[] aPlayer, String aColour, int aGoalDifference, Boolean inChallengeTrophy) { 
     players = new HashSet<>(Arrays.asList(aPlayer)); 
     colour = aColour; 
     goalDifference = aGoalDifference; 
     challengeTrophy = inChallengeTrophy; 
    } 

    public void addPlayer(String player) { 
     players.add(player); 
    } 

    public void removePlayer(String player) { 
     players.remove(player); 
    } 
} 
0

替换为环部分中的全部用这条线

this.players = Arrays.copyOfRange(aPlayer,0,5) 

避免直接分配作为,因为相同的参考中的每个对象重复那是可怕的。除了copyofrange还允许你根据你想要的数字添加前5名球员等等。

1

我真的不明白什么是你想与你的字符串数组做,但如果你真的想这样做,你必须初始化您的数组是这样的:

public FootballTeam(String[] aPlayer, String aColour, int aGoalDifference, Boolean inChallengeTrophy) { 
    players = new String[5]; 
    for (int i = 0; i < 5; i++) { 
     players[i] = aPlayer[i]; 
    } 
    colour = aColour; 
    goalDifference = aGoalDifference; 
    challengeTrophy = inChallengeTrophy; 
} 

但如果你想你的存储aPlayer在你的对象你可以:

public FootballTeam(String[] aPlayer, String aColour, int aGoalDifference, Boolean inChallengeTrophy) { 
    players = aPlayer; 
    colour = aColour; 
    goalDifference = aGoalDifference; 
    challengeTrophy = inChallengeTrophy; 
} 

要小心,因为如果你修改的球员之一元素也将修改aPlayer因为你只是复制引用,而不是数组的每个元素的深层副本。

0

你应该避免做一个简单的赋值this.players = aPlayer,因为如果你的aPlayer内容改变了,玩家数组也会被更新。

要做一个副本,你可以做一个循环,但它可能会更好地使用System.arraycopyArrays.copyOf

0

请尝试下面的代码与你的构造函数。

示例代码

public FootballTeam(String[] aPlayer, String aColour, int aGoalDifference, Boolean inChallengeTrophy) { 
    players = new String[aPlayer.length]; 
    players = aPlayer; 
    colour = aColour; 
    goalDifference = aGoalDifference; 
    challengeTrophy = inChallengeTrophy; 
} 

这里首先你比你initialize整个array值需要initialize大小的array

希望它会帮助你轻松。

相关问题