2012-01-11 54 views
0

我有一個方法需要2個整數method(int ii, int xx)。我想循環使用一系列的值,但我不能想出一種方法來實現,而不用硬編碼每個值。具體數字的嵌套循環

當II = 21,我想XX = 19至9 當II = 20,我想XX = 18至12

所以硬編碼這將是:

method(21,19) 
method(21,18) 
... 
method(21,10) 
method(21,9) 
method(20,18) 
method(20,17) 
... 
method(20,13) 
method(20,12) 

這就是我有這麼遠,但就像我不希望它做的方法(4,19)

  for(int ii = 9;ii<21;ii++){ 
       for(int xx = 4;xx<19;xx++){ 
        method(ii,xx); 
       } 
      } 
+0

保持地圖一個外環的=>內部循環計數,使用當前外部循環迭代計數的映射值。 – 2012-01-11 22:20:01

+1

你不想要的案件之間的關係是什麼? – Grammin 2012-01-11 22:20:15

+1

我不明白你的問題的要求是什麼。你的例子中9和12來自哪裏? – 2012-01-11 22:20:46

回答

2

最初由埃德建議,你要使用的地圖。我建議創建Range類來表示的整數範圍爲xx值,那麼就可以建立地圖Integer - >Range(ⅱ - > XX):

static class Range { 
    public final int start; 
    public final int end; 

    public Range(int start, int end) { 
     this.start = start; 
     this.end = end; 
    } 
} 

static final Map<Integer,Range> RANGE_MAP = new HashMap<Integer,Range>(); 
static { 
    RANGE_MAP.put(21, new Range(9,19)); 
    RANGE_MAP.put(20, new Range(12,18)); 
    // ... 
} 

void calling_method() { 
    for(Entry<Integer,Range> entry : RANGE_MAP.entrySet()) { 
     int ii = entry.getKey(); 
     Range r = entry.getValue(); 
     for(int xx = r.start; xx <= r.end; xx++){ 
      method(ii,xx); 
     } 
    } 
} 

void method(int ii, int xx) { 
    // do stuff 
} 
0

這是硬編碼,但在地圖中的列表可以爲你做這個它不處理spcific情況:

private static final Map<Integer,List<Integer>> map = new HashMap<Integer,List<Integer>>(){{ 
    put(21, new ArrayList<Integer>(){{ 
     add(19); 
     add(18); 
     add(17); 
     ... 
    }}); 
    put(20, new ArrayList<Integer>(){{ 
     add(18); 
     add(17); 
     ... 
    }}); 
}}; 

將地圖保存爲靜態和最終將意味着您不會在每次使用它時創建它。

然後你就可以遍歷像這樣:

for(Integer ii : map.keySet()){ 
    for(Integer xx : map.get(ii)){ 
     method(ii,xx); 
    } 
}