繁体   English   中英

如何在其中一个字段是数组的类中创建构造函数(Java)

[英]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.arraycopyArrays.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM