for循环重复一次,即使被告知不要

时间:2016-04-02 23:51:08

标签: java android loops android-studio datastore

我不能为我的生活弄清楚为什么这个字符串比较循环会在发现数组中没有值=该值后再次循环。

        Query p = new Query(section).addSort("Login", Query.SortDirection.DESCENDING) ;
    PreparedQuery qp = datastore.prepare(p);

    int listSize = 0;
    for(Entity amount : qp.asIterable()){
        listSize++;
    }

    for (Entity result2 : qp.asIterable()) {
        if (breakOff==true) {
            break;
        } else {
            System.out.println("1stloop size is " + size + result2.getProperty("Login"));
            MyBean temp2 = new MyBean();
            temp2.setData((String) result2.getProperty("Login"));

            Query q = new Query("sent").addSort("Login", Query.SortDirection.DESCENDING);
            PreparedQuery pq = datastore.prepare(q);

            int i = 0;
            for (Entity result : pq.asIterable()) {

                i++;
                System.out.println("2ndloop is "+ result.getProperty("Login"));
                MyBean temp = new MyBean();
                temp.setData((String) result.getProperty("Login"));

                if (temp.getData().equals(temp2.getData())) {
                    System.out.println("broken");
                    break;
                } else if (i >= size) {


                    sentNum.setData(temp2.getData());
                    Entity logins = new Entity("sent");
                    logins.setProperty("Login", temp2.getData());
                    datastore.put(logins);
                    System.out.println("sizematch wrote " + temp2.getData());
                    breakOff = true;
                } else {
                    System.out.println("increase" + i);

                }

            }
        }
    }

正如你所看到的,我调用了breakOff == true,所以循环不会再次通过它,但它总是这样做。一次。

1 个答案:

答案 0 :(得分:0)

好吧,看看你检查的地方是否需要打破,它是在循环的开始。这意味着程序将在下一次进入循环时中断,因此它将再次运行一次。 要修复它,只需将语句位置更改为第二个循环的结尾。 这是你的固定代码:(顺便说一下它是一个烂摊子,尝试组织一下)

  Query p = new Query(section).addSort("Login", Query.SortDirection.DESCENDING) ;
    PreparedQuery qp = datastore.prepare(p);

    int listSize = 0;
    for(Entity amount : qp.asIterable()){
        listSize++;
    }

    for (Entity result2 : qp.asIterable()) {

            System.out.println("1stloop size is " + size + result2.getProperty("Login"));
            MyBean temp2 = new MyBean();
            temp2.setData((String) result2.getProperty("Login"));

            Query q = new Query("sent").addSort("Login", Query.SortDirection.DESCENDING);
            PreparedQuery pq = datastore.prepare(q);

            int i = 0;
            for (Entity result : pq.asIterable()) {

                i++;
                System.out.println("2ndloop is "+ result.getProperty("Login"));
                MyBean temp = new MyBean();
                temp.setData((String) result.getProperty("Login"));

                if (temp.getData().equals(temp2.getData())) {
                    System.out.println("broken");
                    break;
                } else if (i >= size) {


                    sentNum.setData(temp2.getData());
                    Entity logins = new Entity("sent");
                    logins.setProperty("Login", temp2.getData());
                    datastore.put(logins);
                    System.out.println("sizematch wrote " + temp2.getData());
                    breakOff = true;
                    break;
                } else {
                    System.out.println("increase" + i);

                }

            }

              if (breakOff)
                      break;
    } 

请注意,没有理由检查if(breakOff==true),因为您还可以查看if(breakOff)并获得相同的答案。原因是breakOff==true只有当breakOff为真时才会给你真实,但if(breakOff)当且仅当breakOff为真时才为真,所以它们是相同的