2016-06-15 4 views
-1

for 루프를 사용하여 HashMap의 모든 부분을 순환하려고합니다. 그러나 문제는 for 루프의 본문 내부에서 코드가 완전히 수행되지 않고 있다는 것입니다. 즉, 특정 시점에만 일어나고,하고 stopping.My 코드는 다음입니다 : 그것은For 루프의 모든 코드를 수행하지 않습니다

public static void printCombination(String arr[], int n, int r) 
{ 
    // A temporary array to store all combination one by one 
    Log.e("ERROR","ATLEAST I'M INSIDE"); 
    String data[]=new String[r]; 
    for(int no = 0;no<arr.length;no++){ 
     boolean decider = true; 
     if (latest.cart_names.size()>0) { 
      for (Map.Entry<String, Map<String, Integer>> entry : latest.cart_names.entrySet()) { 
       Log.e("ERROR", "ATLEAST I'M INSIDE 1"); 
       String arrayElement = arr[no]; 
       Map<String, Integer> outerMapValue = entry.getValue(); 
       Log.e("ERROR", "ATLEAST I'M INSIDE 2"); 
       if (outerMapValue.containsKey(arrayElement)) { 
        Log.e("ERROR", "ATLEAST I'M INSIDE 3"); 
        if (outerMapValue.get(arrayElement) != null) { 
         Log.e("ERROR", "ATLEAST I'M INSIDE 4"); 
         if (outerMapValue.get(arrayElement) > 0) { 
          return; 
         }else{ 
          Log.e("ERROR", "ATLEAST I'M INSIDE 5"); 
          decider = false; 
         } 
        } 
       } 
      } 
      Log.e("ERROR",Boolean.toString(decider)); 
      Log.e("ERROR",Integer.toString(finalmap.size())); 
      if (finalmap.size()==0) { 
       if (decider) { 
       Log.e("ERROR", "ATLEAST I'M INSIDE 8"); 
       for (int rt = 0; rt < latest.cart_names.size(); rt++) { 
        Log.e("ERROR", "ATLEAST I'M INSIDE 6"); 
        finalmap.add(rt,arr[no]); 
       } 
      } 
     }else{ 
      if (decider) { 
       int sum1 = 0; 
       int sum2 = 0; 
       for (Map.Entry<String, Map<String, Integer>> entry : latest.cart_names.entrySet()) { 
        sum1 += latest.cart_names.get(entry.getKey()).get(finalmap); 
        sum2 += latest.cart_names.get(entry.getKey()).get(arr[no]); 
       } 
       Log.e("ERROR",Integer.toString(sum1)); 
       Log.e("ERROR",Integer.toString(sum2)); 
       if (sum2>sum1){ 
        for (int rt = 0; rt < latest.cart_names.size(); rt++) { 
         Log.e("ERROR", "ATLEAST I'M INSIDE 7"); 
         finalmap.add(arr[no]); 
        } 
       } 
      } 

      } 
    }} 

를 기록하지 않는 선 :

Log.e("ERROR",Boolean.toString(decider)); 
Log.e("ERROR",Integer.toString(finalmap.size())); 

답변

3

이 조건이 충족되고 반환 /를 종료 방법 ...

if (outerMapValue.get(arrayElement) > 0) { 
    return; 

은 편집 : @petey@Andrew L

댓글 제안 (대한 (감사합니다 :)

당신이 자바 모범 사례를 살펴 생각해야하며 branching control statement

이 (가)의 현재 반복을 생략 할 수 있습니다 계속 문을 깰 사용하는 방법 for, while 또는 do-while 루프.

+1

안내를 위해 continue 키워드를 사용하는 것에 대해 언급해야합니다. 그가 루프를 종료하고 나머지를 수행하려는 경우 휴식을 권장합니다. – Li357

+1

올바른 키워드'break'를 제공하고 for 루프를 멈추게하는 방법을'return'과 다르게 사용해야합니다. – petey

+0

@AndrewL 님, 의견을 보내 주시면 감사하겠습니다 .... –

0

루프 내부에 return 문이 있기 때문에 목록에있는 행이 로깅되지 않는다고 생각합니다. 루프가 그 시점에서 끝내고 여전히 회선을 로그하려면, 대신 break을 사용해야합니다.