我的方法有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 :(得分:2)
正如Edd最初建议的那样,你会想要使用地图。我建议创建一个Range
类来表示xx
值的整数范围,然后您可以构建Integer
- &gt;的地图。 Range
(ii - &gt; 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
}
答案 1 :(得分:0)
它是硬编码的,但地图中的列表可以为您执行此操作:
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);
}
}