[英]How to create constructors within a class where one of the fields is an array(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;
}
我真的不确定如何编写构造函数,以便仅使用字符串数组来测试玩家部分。
我还必须创建允许添加或删除新玩家的方法,而且我不确定如何构造它,任何帮助将不胜感激。 干杯!
您可以:
this.players = aPlayer;
如果要复制数组内容(如在for循环中所做的那样),则需要先初始化播放器。
this.players = new String[numberOfFields];
我不太了解您要对String数组做什么,但是如果您真的想这样做,则必须像这样初始化数组:
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,因为您只需复制引用而不是数组每个元素的深层副本。
是的,您做对了。 但是,您不必使用for循环使两个数组相同,而只需将“ players = aPlayer;”放进去。
这是代码:
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);
}
}
用此行替换整个for循环部分
this.players = Arrays.copyOfRange(aPlayer,0,5)
避免直接分配,因为这很可怕,因为在每个对象中都重复相同的引用。 除了copyofrange之外,您还可以根据需要添加前5个播放器等。
您应该避免做一个简单的分配this.players = aPlayer
因为如果您的aPlayer内容更改,players数组也会被更新。
要进行复制,您可以执行循环,但是使用System.arraycopy
或Arrays.copyOf
可能更好。
尝试使用构造函数执行以下代码。
样例代码
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
值。
希望它能对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.