很奇怪:For循环在某些条件下返回最后一次迭代

时间:2014-06-25 01:49:51

标签: java android for-loop

我面临一个奇怪的问题。每当我通过添加一个额外的对象以便大小为5来更新我的对象数组时,我的for循环会改变它的行为。当我恢复它时,它会恢复正常。这是我的代码

String[] a = new String[4];
    a[0] = "EVENT 1";
    a[1] = "EVENT 2";
    a[2] = "EVENT 3";
    a[3] = "EVENT 4";

    LatLng[] b = new LatLng[4];
    b[0] = new LatLng(32.546586510595404, -80.70999909192324);
    b[1] = new LatLng(32.54606196179351, -80.71023747324944);
    b[2] = new LatLng(32.54620949145382, -80.70962257683277);
    b[3] = new LatLng(32.494091, -80.739474);

然后我通过for循环将对象添加到列表中(行为正确)然后我有另一个for循环从getter setter类中检索这些对象

for(int i = 0; i <= event.size(); i++) {
            latB = event.get(i).getmLatLng().latitude;
            lngB = event.get(i).getmLatLng().longitude; }

因此for循环的行为从正常到仅检索指定次数的最后一次迭代。我一直在寻找导致问题的原因,但我没有看到任何错误,特别是当我将阵列恢复到他们的方式时,问题就停止了。是什么导致了这个问题?

编辑*

好的,这是前两个之间的代码。这是创建事件对象的事件类

public class Event{
public LatLng mLatLng;

public Event()
{

}
public Event(String id, LatLng latlng)
 {
        mLatLng = latlng;
        mId = id;


 }



public void setmLatLng(LatLng latLng)
{
    this.mLatLng = latLng;
}

public LatLng getmLatLng()
{
    return this.mLatLng;
}}

然后在与之前相同的活动中,我将这些事件添加到列表中并将列表存储在sql Lite数据库中

int TOTALEVENTS = a.length-1;



    for(int i = 0; i <= TOTALEVENTS; i++)
    {

        EVENTS.add(i, new Event(new String(EVENTNAME[i]), EVENTLOCATION[i]));

    } db.addEvents(EVENTS);

然后我转到之前的代码,SQL Lite数据库返回存储的列表

List<Event> event = new ArrayList<Event>();
        event = db.getEvents();

2 个答案:

答案 0 :(得分:1)

我不确定它是如何工作的,因为你在for循环中使用<=时应该使用<

for(int i = 0; i <= event.size(); i++)

应该是:

for(int i = 0; i < event.size(); i++)

此外,您没有向我们展示代码的重要部分:您正在使用event.get(i)... - get()是列表注释 - 而不是数组。这意味着您正在从数组到代码中的event对象进行某种“转换”。这个翻译是如何进行的?这个bug也可以存在。

答案 1 :(得分:0)

所以我没有解决这个问题,但我找到了一个可靠的解决方法。我将所有数组转换为列表。然而,在我调试它之后问题的根源是从sqllite数据库获取事件。这些事件正确存储但由于一些非常非常奇怪的原因而无法正确检索。并且为了增加这个bug的神秘面纱,问题在于数字3.如果列表或数组的大小等于4,则无法正确检索事件导致错误。因此,在将数组转换为列表并增加列表大小之后,错误就停止了。