将属性写入二维数组

时间:2012-03-23 03:26:10

标签: java loops nested multidimensional-array

这是我第一次在这里发帖,但我迫切需要一些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;
    }

4 个答案:

答案 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循环。删除休息;