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

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


正如我所说,.allstar已被标记,我不知道如何解决。有人可以帮忙吗?

最佳答案

一个问题是您将名册声明为没有任何类型信息的通用ArrayList。

roster.get(counter)将返回一个Object而不是Player。

您可以通过以下两种方法解决:


将名单声明为Player对象的ArrayList,而不是一般的ArrayList

private static ArrayList<Player> roster;

将roster.get(counter)转换为Player类型的对象

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



另一个问题是,您已经在Player类中将allstar声明为私有变量。私有变量只能由声明它们的类访问。

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

这是一个例子:

private boolean allstar;

//...

public boolean isAllstar() {
    return allstar;
}


看到的第三个问题是,因为for循环的终止条件不正确,所以方法numberOfAllstars将引发异常。

就像数组一样,大小为n的列表将以索引从0开始并以n-1结尾的索引进行访问。由于您的for循环在counter
这是编写循环的正确方法:

for (int counter = 0; counter < rosterSize; counter++)

10-06 04:08