阵列访问产生不需要的结果

时间:2012-01-15 04:26:53

标签: android arrays eclipse

尝试在数组中放置值时,我得到一个不寻常的结果。 我有一个简单类结果的数组表[] {int score,long time,string ID} 意图是有一种领导委员会。 我的代码很高兴找到了插入新分数的正确位置,如果它位于前10名。

    int ix = 0; 
    int jx = 10; //
    while ( ix < jx )
    {
        if (points > sTable[ix].points)
        {
            // score is higher move records down
            for (jx = mNumRecords - 1; jx >ix ; jx--)
            {
                sTable[jx] = sTable[jx -1];
            }
            //now add new score
            sTable[ix].score = score; // all good until here
            sTable[ix].time = time;


        }

        ix++;           
    }

问题是,当我尝试使用sTable [ix] .score = score;

插入乐谱时

该值将写入sTable [ix] .score以及sTable [ix +1] .score。

它是可重复的,它出现在ix的任何值上,我单步执行代码,据我所知,命令只执行一次。

有没有人见过这个?

1 个答案:

答案 0 :(得分:0)

那是因为您将对象引用复制到数组中的下一个元素。您应该复制值,或创建一个新对象:

选项A:

// score is higher move records down
for (jx = mNumRecords - 1; jx >ix ; jx--)
{
    sTable[jx].time = sTable[jx -1].time;
    sTable[jx].score = sTable[jx -1].score;
}
//now add new score
sTable[ix].score = score; // all good until here
sTable[ix].time = time;

选项B:

for (jx = mNumRecords - 1; jx >ix ; jx--)
{
    sTable[jx] = sTable[jx -1];
}
sTable[ix] = new Result(score, time, ""); // Or however you construct the object