如标题所示。我有两个类,一个是“玩家”,另一个是“团队”,其中包括玩家的数组列表。在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++)