2012-01-11 7 views
0

私は2つのintを取るメソッドを持っていますmethod(int ii, int xx)。私はある範囲の値をループしたいが、各値をハードコーディングすることなくそれを行う方法を考えることはできない。特定の番号のネストされたループ

II = 21、iは、xxは19場合20 = II 9を介して、私は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

: - >Range(> XX II - )私は、あなたがIntegerのマップを構築することができ、xx値に対して整数の範囲を表現するRangeクラスを作成示唆します内側のループカウントは、現在の外側ループ繰り返しカウントのマップ値を使用します。 –

+1

あなたが望んでいないケースの関係は何ですか? – Grammin

+1

あなたの質問の要件は何か分かりません。 9と12はあなたの例のどこから来たのですか? –

答えて

2

もともとエドによって示唆されるように、あなたはマップを使用することをお勧めします。 > =外側のループのマップを保管してください

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ケースを処理doesntの:

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); 
    } 
} 
関連する問題