Вложенные циклы для определенных чисел - PullRequest
0 голосов
/ 12 января 2012

У меня есть метод, который принимает в 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)

, это то, что у меня есть, но оно не обрабатывает особые случаи, такие как я не хочу, чтобы это делало метод, 19)

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

Ответы [ 2 ]

2 голосов
/ 12 января 2012

Как первоначально предложил Эдд, вы захотите использовать карту. Я предлагаю создать класс Range для представления целочисленного диапазона значений xx, тогда вы можете построить карту из Integer -> Range (ii -> 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 голосов
/ 12 января 2012

Она жестко запрограммирована, но список на карте может сделать это за вас:

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