Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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 如何访问作为ArrayList一部分的对象的一部分?_Java_Class_Object_Arraylist - Fatal编程技术网

Java 如何访问作为ArrayList一部分的对象的一部分?

Java 如何访问作为ArrayList一部分的对象的一部分?,java,class,object,arraylist,Java,Class,Object,Arraylist,正如标题所说。我有两个类,一个组成“玩家”,另一个组成“团队”,其中包括一个玩家列表。我在team类中的一个方法是howmanyallstars,在这里我尝试查看团队中有多少allstars,但是我的布尔值出现了一个错误 public class Player { private String nameofplayer; private int currentposition; private double baverage; private boolean allstar; public P

正如标题所说。我有两个类,一个组成“玩家”,另一个组成“团队”,其中包括一个玩家列表。我在team类中的一个方法是howmanyallstars,在这里我尝试查看团队中有多少allstars,但是我的布尔值出现了一个错误

public class Player {
private String nameofplayer;
private int currentposition;
private double baverage;
private boolean allstar;

public Player (String name, int position, double battingaverage, boolean isallstar) {

    nameofplayer = name;
    currentposition = position;
    baverage = battingaverage;
    allstar = isallstar;

}
那么我有:

public class Team {

private String nameteam;
private static ArrayList roster;
private double priceofgame;
private double budget;
private int numberofgames;

public Team (String teamname, ArrayList teamroster, double price, double teambudget, int games) {

    nameteam = teamname;
    roster = teamroster;
    priceofgame = price;
    budget = teambudget;
    numberofgames = games;
}


public static int numberOfAllstars(Team name) {

    int rostersize = roster.size();

    int numofallstars = 0;
    for (int counter = 0; counter <= rostersize; counter++) {

        if (roster.get(counter).allstar == true)  numofallstars++;
    }

    return numofallstars;
} 
公共类团队{
私人字符串名称组;
私有静态数组列表花名册;
私人双倍价格;
私人双重预算;
私人游戏;
公共团队(字符串团队名称、ArrayList团队花名册、双倍价格、双倍团队预算、整数游戏){
名称团队=团队名称;
花名册=团队花名册;
价格=价格;
预算=团队预算;
numberofgames=游戏;
}
公共静态int numberOfAllstars(团队名称){
int-rostersize=花名册.size();
int numofallstars=0;

for(int counter=0;counter
private boolean allstar;
是私有的,因此您不能在
Player
类之外访问它。 在玩家类中为其制作geter:

public boolean getAllstar() {
    return allstar;
}
然后,在团队课上:

if (roster.get(counter).getAllstar())  numofallstars++;

private boolean allstar;
是私有的,因此您不能在
Player
类之外访问它。 在玩家类中为其制作geter:

public boolean getAllstar() {
    return allstar;
}
然后,在团队课上:

if (roster.get(counter).getAllstar())  numofallstars++;

问题是allStar字段是私有的。因此您无法在团队类中访问它。您需要创建一个getter来访问您的player类的allStar值

public class Player {



     public boolean isAllStar(){
          return this.allStar;
     }
}
然后您可以在循环中调用它:

public static int numberOfAllstars(Team name) {

    int numofallstars = 0;    
    for (int counter = 0; counter < roster.size(); counter++) {
        if (roster.get(counter).isAllStar())  numofallstars++;
    }

    return numofallstars;
} 
public static int numberOfAllstars(团队名称){
int numofallstars=0;
对于(int counter=0;计数器<花名册.size();计数器++){
if(花名册.get(counter.isAllStar())numofallstars++;
}
返回numofallstars;
} 
请注意,数组是0基索引的,因此if应该是
计数器
。也不要使用原始类型,使用泛型

ArrayList<Player> roster;
ArrayList花名册;

问题在于,allStar字段是私有的。因此,您无法在Team类中访问它。您需要创建一个getter来访问您的player类的allStar值

public class Player {



     public boolean isAllStar(){
          return this.allStar;
     }
}
然后您可以在循环中调用它:

public static int numberOfAllstars(Team name) {

    int numofallstars = 0;    
    for (int counter = 0; counter < roster.size(); counter++) {
        if (roster.get(counter).isAllStar())  numofallstars++;
    }

    return numofallstars;
} 
public static int numberOfAllstars(团队名称){
int numofallstars=0;
对于(int counter=0;计数器<花名册.size();计数器++){
if(花名册.get(counter.isAllStar())numofallstars++;
}
返回numofallstars;
} 
请注意,数组是0基索引的,因此if应该是
计数器
。也不要使用原始类型,使用泛型

ArrayList<Player> roster;
ArrayList花名册;

首先,您的
花名册
数组列表
的原始形式,因此
get
方法将返回一个
对象
,而不是
玩家
。使用泛型在
数组列表上指定“什么”:

private static ArrayList<Player> roster;
接下来,
allstar
Player
中的
private
字段。创建
public
getter方法并调用它,而不是直接引用该字段

接下来,出于某种原因,您的
花名册
变量和
numberOfAllstars
方法是
静态的
。这是没有原因的。只需在此处将所有内容设置为非
静态的
。此外,
numberOfAllstars
上的
名称
参数也没有理由;它可以删除

此外,一旦执行此操作,您将使用此
for
循环运行数组末尾,因为索引的范围从
0
size()-1

for (int counter = 0; counter <= rostersize; counter++) {

(首先,一旦你创建了getter方法
isAllstar()

,你的
花名册是
ArrayList
的原始形式,因此
get
方法将返回一个
对象,而不是
播放器
。使用泛型在
ArrayList
上指定“什么”:

private static ArrayList<Player> roster;
接下来,
allstar
Player
中的
private
字段。创建
public
getter方法并调用它,而不是直接引用该字段

接下来,出于某种原因,您的
花名册
变量和
numberOfAllstars
方法是
静态的
。这是没有原因的。只需在此处将所有内容设置为非
静态的
。此外,
numberOfAllstars
上的
名称
参数也没有理由;它可以删除

此外,一旦执行此操作,您将使用此
for
循环运行数组末尾,因为索引的范围从
0
size()-1

for (int counter = 0; counter <= rostersize; counter++) {

(创建getter方法
isAllstar()

后,一个问题是将花名册声明为泛型ArrayList,而不包含任何类型信息

获得(计数器)将返回一个对象而不是一个玩家

您可以通过两种方式解决此问题:

  • 将花名册声明为玩家对象的ArrayList,而不是通用ArrayList

    private static ArrayList<Player> roster;
    
  • 另一个问题是您已将allstar声明为Player类中的私有变量。私有变量只能由声明它们的类访问

    最好的解决方案不是将变量的可见性从private更改为public。相反,您应该创建一个访问器方法来从类外部检索变量的值

    以下是一个例子:

    private boolean allstar;
    
    //...
    
    public boolean isAllstar() {
        return allstar;    
    }
    
    第三个问题是,您的方法numberOfAllstars将抛出异常,因为for循环的终止条件不正确


    与数组一样,大小为n的列表将使用从0开始到n-1结束的索引进行访问。因为for循环在计数器时终止。一个问题是您将花名册声明为通用数组列表,而没有任何类型信息

    获得(计数器)将返回一个对象而不是一个玩家

    您可以通过两种方式解决此问题:

  • 将花名册声明为玩家对象的ArrayList,而不是通用ArrayList

    private static ArrayList<Player> roster;
    
  • 另一个问题是您已经声明了allsta