我面临一个奇怪的问题。每当我通过添加一个额外的对象以便大小为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();
答案 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,则无法正确检索事件导致错误。因此,在将数组转换为列表并增加列表大小之后,错误就停止了。