2013-05-11 82 views
0

我在循环中添加,但返回值始终为0,我无法弄清楚。For循环将不会添加,返回原始值(android,java)

如果我取消注释最后2行中的一行,它将正确返回手动值,并且类的其余部分将工作。 ARRAYLIST_SIZE = 10.

public float averageBearing() { 
    float sumBng = 0; 
    for (int i = 0; i==ARRAYLIST_SIZE; i++) { 
     Location l = locList.get(i); 
     float tempBearing = l.getBearing(); 
     sumBng += tempBearing; 
    } 
    float finalBng = sumBng/ARRAYLIST_SIZE; 
    //remove following lines for real use 
    //finalBng = (float) (Math.random()*360); 
    //finalBng = (float) 105.0; 
    return finalBng; 
} 

我相当确定列表中的位置有轴承,这里是add方法。现在我必须欺骗方位,因为如果我们正在移动,位置只有它,但我在我的固定桌子上。

public void add(Location location) { 
    if (locList == null) { 
     locList = new ArrayList<Location>(); 
    } 
    //test code to spoof bearing 
    location.setBearing((float) 105.0); 
    //use only locations with extra data 
    if (location.hasBearing() && location.hasSpeed()) { 
     locList.add(location); 
     mostRecent = location; 
     //ensure we have at most 10 recent locations 
     //no reason to use stale data 
     while (locList.size()>10) { 
      locList.remove(0); 
     } 
    } 
    ARRAYLIST_SIZE = locList.size(); 

} 
+0

为什么初始化一个新的tempBearing循环? – ChiefTwoPencils 2013-05-11 20:52:57

+1

我建议你学习如何使用Eclipse或IntelliJ IDEA调试器。这些是任何Android开发人员的必备工具。它们允许您一次一行地查看代码,看看它在做什么。您还可以查看所有变量的值,以确保它们符合您的期望。 – 2013-05-11 21:02:59

+0

我在Eclipse上使用ADT,我会研究它。该软件有这么多工具,我需要花一天时间,只是学习环境... – 2013-05-11 21:07:38

回答

3

循环中的条件表达式正在测试相等性。它未能在第一次测试,因为我是零,ARRAYLIST_SIZE是10改成这样:

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

好的,谢谢。看起来我需要检查循环,我认为它是说“从0开始,直到它等于SIZE,给我加1并循环。”我猜它的意思是“只要我= SIZE,循环”,这显然从来没有发生过。 – 2013-05-11 21:00:53

+0

对。在每次迭代之前,测试中间的条件表达式。循环第一次结束时会结束。 – 2013-05-11 21:02:37

3

更改此:

for (int i = 0; i==ARRAYLIST_SIZE; i++) 

这样:

for (int i = 0; i<ARRAYLIST_SIZE; i++) 
1

你从不输入for循环,因为

i==ARRAYLIST_SIZE 

它应该是

i<ARRAYLIST_SIZE 
+0

这个想法是正确的,但使用'<='而不是'<'将导致一个'IndexOutOfBoundsException' – jlordo 2013-05-11 20:59:15

+0

你是对的,我编辑过 – bobkilla 2013-05-11 21:17:43