2012-01-11 56 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); 
    } 
}