我是Java初学者,这是我的第一篇文章。 我找不到任何与我的问题完全相同的东西,尽管这篇文章似乎很相似 Why is this print line command executing twice?
但答案并没有帮我解决。
我知道这可能是一些愚蠢的事情,但我希望你们中的一个人可能能够向我指出为什么名为“匹配”的数组中的最后一个条目打印两次。
提前致谢, 罗伯特。
这是我的代码:
public String buildMatchList(Match[] matches)
{
fixtures = "";
int i = 0;
for ( i = 0; i < numMatches; i++)
{
if (matches[i] != null)
{
fixtures += String.format("\n%-10.10s %10.9s %15.14s", matches[i].getTeamA(), " Vs ", matches[i].getTeamB());
}
}
System.out.println(fixtures);
}
// -EDIT -
// numMatches set in this method
public void fillMatchArray(Team[] sortedTeams, int numTeams)
{
int homeTeam = 0;
int awayTeam = 0;
goalsA = 0;
goalsB = 0;
fixtures = "";
boolean played = false;
matches = new Match[MAX_NUM_GAMES];
for (homeTeam = 0; homeTeam < sortedTeams.length; homeTeam++)
for (awayTeam = homeTeam+1; awayTeam < sortedTeams.length; awayTeam++ )
{
String teamA = sortedTeams[homeTeam].getTeamName();
String teamB = sortedTeams[awayTeam].getTeamName();
matchFixtures = new Match(teamA, teamB, goalsA, goalsB, played);
{
fixtures += String.format("\n%-10.10s %10.9s %15.14s",
matchFixtures.getTeamA(), " Vs ", matchFixtures.getTeamB());
}
int i = 0;
matches[i] = matchFixtures;
numMatches++;
buildMatchList(matches);
}
}
答案 0 :(得分:6)
如果打印两次,最可能的解释是最后两个条目是相同的。有一个常见的错误,你可以将一个可变对象添加到集合中两次,当你认为它们不同时,它们不是。
我建议您尝试逐步调试调试器中的代码,看看它在做什么?
这是踩过代码会有所帮助的地方。您每次都设置数组的第一个元素,因为我始终为0
int i = 0;
matches[i] = matchFixtures;
numMatches++;
将其更改为
matches[numMatches++] = matchFixtures;
答案 1 :(得分:-1)
匹配是一个对象,因此匹配是一种称为引用类型。当你将它们与null进行比较时,它会将引用与null进行比较,它永远不会,因此它将始终返回true。
如果您希望它将对象的内容与null进行比较,则应将 matches [i]!= null 替换为 matches [i] .equals(null)