2016-04-02 37 views
0

'e anlatılmasa bile, bu dizge karşılaştırma döngüsünün neden dizide = o değerde hiçbir değer bulunmadığını bulduktan sonra tekrar döneceğini anlayamıyorum. Gördüğünüz gibi döngü tekrar geçmesi olmaz bu yüzdenDöngü için kendini bir kez, bir kez bile yinelemedim bile,

 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); 

       } 

      } 
     } 
    } 

, ben == true bir BREAKKapalı diyoruz, ancak her zaman. Tam olarak bir kere.

+0

Bu, kodunuzun yalnızca küçük bir parçacığı olduğundan, sahip olduğunuz sorunu çözmeye çalışmak için buradan çıkacak yeterli bilgi olduğunu sanmıyorum. – TechnoCF

+0

Peki, "breakOff = true;" ifadesinin, döngünün ilk yinelemesine basıp vurmadığını görmek için bir hata ayıklayıcı kullandınız mı? Söylediklerinize dayanarak, ikinci iterasyona vurulduğu oldukça açıktır. Bir hata ayıklayıcı kullanın ve koşullarınızı düzeltin. –

+0

Hata ayıklayıcısında satır satır nasıl giderim? Tek gördüğüm breakOff = true. –

cevap

0

Kırılmanız gerekip gerekmediğini kontrol ettiğiniz yere bakın, döngünün başlangıcında. Bu, programın bir sonraki döngüye girmesiyle kırılacağı anlamına gelir, böylece tam olarak bir kez daha çalışacaktır. Düzeltmek için, ifade konumunu ikinci döngünün sonuna kadar değiştirin. Ayrıca if(breakOff) kontrol etmek ve aynı cevabı alabilirsiniz if(breakOff==true) kontrol için hiçbir neden olmadığını

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; 
    } 

bildirim (o, bu biraz organize etmek için bir karmaşa deneyin bu arada): burada sabit bir koddur . Nedeni breakOff==true, breakOff doğruysa ve if(breakOff) doğruysa ve breakOff doğruysa, true olur, bu nedenle aynıdır.

+0

Kodunuz çalışıyor ve program ara veriyor. Maalesef hala bir kez kod boyunca yineleniyor. –

+0

hala başka bir zaman çalıştığını söylediğinde, iç döngü mi yoksa dış döngü mi demek istiyorsun? – Moshe9362

+0

Dış döngü. Eğer ise (breakOff) { System.out.println ("brokenOFF"); kırılması; } Bana iki set "brokenOFF" verir –