这是我第一次在这里发帖,但我迫切需要一些Java专业知识(或者只是另一组眼睛)。
我正在将对象的ArrayList(Result)写入2d数组。我试图使用嵌套循环。基本上,每行都会输入,并检查第一列,看它是否与ArrayList中具有相同“team”属性的任何一行匹配。如果它找到匹配它处理并删除它,它会一直持续到列表的末尾,然后退出以在下一行重复该过程。
它似乎有效,但是当它找到匹配并处理它(包括删除它)时,它似乎不会继续在内循环中查找更多匹配。
任何人都可以告诉我为什么它不会继续循环?
这是我的代码:
private String[][] addScores(String[][] dataTable)
{
for(int r = 0; r < dataTable.length; r++)
{
Iterator<Result> itr = outcomes.iterator();
Result temp = new Result();
while(itr.hasNext())
{
temp = itr.next();
//If a team is found.
if (dataTable[r][0] == temp.team)
{
//Increases matches played.
dataTable[r][1] = String.valueOf(Integer.parseInt(dataTable[r][1]) + 1);
if(temp.result == WIN)
{
dataTable[r][2] = String.valueOf(Integer.parseInt(dataTable[r][2]) + 1);
}
if(temp.result == DRAW)
{
dataTable[r][3] = String.valueOf(Integer.parseInt(dataTable[r][3]) + 1);
}
if(temp.result == LOSE)
{
dataTable[r][4] = String.valueOf(Integer.parseInt(dataTable[r][4]) + 1);
}
//removes entry.
itr.remove();
break;
}
}
}
return dataTable;
}
答案 0 :(得分:1)
您存储球队名称和获胜/平局/失败记录的方式非常尴尬。怎么样:
创建一个团队类
public static class Team
{
String name;
int win;
int draw;
int lose;
}
将这些团队放在哈希地图中(使用团队名称作为关键字):
Map<String,Team> map = new HashMap<String,Team>( );
您可以使用以下方式将新团队添加到地图中:
map.put( team.name, team );
然后,当您遍历结果时,您只需要:
Iterator<Result> itr = outcomes.iterator();
while(itr.hasNext())
{
Result temp = itr.next();
Team team = map.get( temp.team );
// etc...
}
答案 1 :(得分:0)
确保String [] [] dataTable是 R * 4 2d数组,并且日志中没有任何indexoutofboundException。
答案 2 :(得分:0)
你正在打破while循环。在itr.remove();
之后删除中断您还要比较字符串的地址而不是内容(当您使用==时),因此您只有匹配,其中行中的第一个条目与结果中的String对象完全相同。如果两个不同的String对象具有相同的内容,则==将不为真。
此外,由于您正在遍历ArrayList,因此请使用for-each循环来清理代码。
for(int r = 0; r < dataTable.length; r++)
{
for(Result result : outcomes)
{
//If a team is found.
if (dataTable[r][0].equals(result.team))
{
//Increases matches played.
dataTable[r][1] = String.valueOf(Integer.parseInt(dataTable[r][1]) + 1);
if(result.result == WIN)
{
dataTable[r][2] = String.valueOf(Integer.parseInt(dataTable[r][2]) + 1);
}
if(result.result == DRAW)
{
dataTable[r][3] = String.valueOf(Integer.parseInt(dataTable[r][3]) + 1);
}
if(result.result == LOSE)
{
dataTable[r][4] = String.valueOf(Integer.parseInt(dataTable[r][4]) + 1);
}
}
}
}
最后,您不需要为此方法返回任何内容,因为数组(或双数组)是对象,并且此方法只能用于其副作用。
答案 3 :(得分:0)
你破坏语句实际上是打破while循环而不是if条件,所以它不会循环while循环。删除休息;