Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在其中一个字段是数组的类中创建构造函数(Java)_Java_Arrays_Methods - Fatal编程技术网

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

如何在其中一个字段是数组的类中创建构造函数(Java),java,arrays,methods,Java,Arrays,Methods,所以我试图创建一个类来构造一个football team对象,但我不太确定数组实际上是如何作为字段工作的。我的构造函数如下所示: public class FootballTeam { private String[] players; private String colour; private int goalDifference; private Boolean challengeTrophy; //---------- Construction and Initialisation o

所以我试图创建一个类来构造一个football team对象,但我不太确定数组实际上是如何作为字段工作的。我的构造函数如下所示:

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;
}
公共级足球队{
私人弦乐演奏者;
私人弦色;
个人目标差异;
私有布尔挑战术;
//----------足球队对象的构造和初始化------//
公共足球队(String[]A球员,String A球员,国际差异,布尔值足球奖杯){
对于(inti=0;i<5;i++){players[i]=aPlayer[i]}
颜色=颜色;
目标差异=目标差异;
挑战疗法=挑战疗法;
}
我真的不知道如何编写构造函数,这样我就可以使用字符串数组来测试播放器部分


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

是的,你做得对。但是不必使用for循环来使两个数组相同,你只需输入“players=aPlayer;”

你可以:

this.players = aPlayer;
如果您想要复制数组内容(就像您在for循环中所做的那样),您需要首先初始化播放器

 this.players = new String[numberOfFields];
代码如下:

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);
    }
}
导入java.util.array;
导入java.util.HashSet;
导入java.util.Set;
公营足球队{
私人场地球员;
私人弦色;
个人目标差异;
私有布尔挑战术;
公共足球队(String[]A球员,String A球员,国际差异,布尔值足球奖杯){
players=newhashset(Arrays.asList(aPlayer));
颜色=颜色;
目标差异=目标差异;
挑战疗法=挑战疗法;
}
公共播放器(字符串播放器){
players.add(player);
}
public void removePlayer(字符串播放器){
玩家。移除(玩家);
}
}

用这一行替换整个for循环部件

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

避免直接赋值,因为这很可怕,因为在每个对象中都会重复相同的引用。此外,copyofrange还允许您根据所需的数字添加前5名玩家等。

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

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

注意这一点,因为如果你修改玩家的一个元素,它也会修改一个玩家,因为你只是复制引用而不是数组中每个元素的深度副本。

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


要进行复制,您可以执行循环,但最好使用
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;
}
这里首先需要
初始化
数组的大小
然后才能
初始化
整个
数组


希望它能帮助您轻松完成。

为什么不干脆
players=aPlayer
?这两个数组都是字符串类型的数组,因此您可以在不使用for循环的情况下分配它们请注意,在这种情况下,
this
是可选的。
public FootballTeam(String[] aPlayer, String aColour, int aGoalDifference, Boolean inChallengeTrophy) {
    players = new String[aPlayer.length];
    players = aPlayer;
    colour = aColour;
    goalDifference = aGoalDifference;
    challengeTrophy = inChallengeTrophy;
}