1

私は 4 つの配列を持っており、それぞれに 3 つの要素 (ただし、それ以上になることもあります) があります。4 x aa.length*bb.length*cc.length*dd.length 配列に、各要素の可能なすべての組み合わせを入力しようとしています。ネストされた for ループでこれを実行しようとしていますが、ロジックに問題があります。これを行う最も効率的な方法が何であるかはわかりません。これは、カフェインに飢えた私の脳がこれまでに思いついたものです.

String[] AA={DDDD, HHHH, ZZZZ};
String[] BB={DDDD, HHHH, ZZZZ};
String[] CC={DDDD, HHHH, ZZZZ};
String[] DD={DDDD, HHHH, ZZZZ};


String[][] 2Darray = new String[4][AA.length*BB.length*CC.length*DD.length];

for (int i = 0; i <AA.length; i++){

  for (int j = 0; j < BB.length; j++){

    for (int k = 0; k < CC.length; k++){

      for (int L = 0; L < DD.length; L++){

        2Darray[3][i+j+k+L] = DD[L]; 
        2Darray[2][i+j+k] = CC[k];
        2Darray[1][i+j] = BB[j];
        2Darray[0][i] = AA[i];

      }
    }
  }
}

これの印刷出力は次のようになります。

DDDD DDDD DDDD DDDD
HHHH DDDD DDDD DDDD
ZZZZ DDDD DDDD DDDD
null HHHH DDDD DDDD
null ZZZZ DDDD DDDD
null null HHHH DDDD
null null ZZZZ DDDD
null null null HHHH
null null null ZZZZ
null null null null
null null null null
null null null null
...etc

これにアプローチするより良い方法は何ですか?

4

3 に答える 3

0
public class Demo {
    public static void main(String[] args) {
        String[] AA={"1", "2", "3"};
        String[] BB={"4", "5", "6"};
        String[] CC={"7", "8", "9"};
        String[] DD={"10", "11", "12"};


        String[][] combinations = new String[AA.length*BB.length*CC.length*DD.length][4];

        // STORING INTO 2-DIMENSIONAL ARRAY
        int currentRow = 0;
        for (int i = 0; i <AA.length; i++){
            for (int j = 0; j < BB.length; j++){
                for (int k = 0; k < CC.length; k++){
                    for (int l = 0; l < DD.length; l++){
                        combinations[currentRow][0] = AA[i];
                        combinations[currentRow][1] = BB[j];
                        combinations[currentRow][2] = CC[k];
                        combinations[currentRow][3] = DD[l];
                        currentRow++;
                    }
                }
            }
        }

        // PRINTING THE 2-DIMENSIONAL ARRAY

                for (int i = 0; i < AA.length*BB.length*CC.length*DD.length; i++){
                    System.out.println();
                    for (int j = 0; j < 4; j++){
                        System.out.print(combinations[i][j]+ " ");
                    }
                }
    }
}
于 2012-08-17T20:25:18.077 に答える
0

これを試して

    String[] AA = {"DDDD", "HHHH", "ZZZZ"};
    String[] BB = {"DDDD", "HHHH", "ZZZZ"};
    String[] CC = {"DDDD", "HHHH", "ZZZZ"};
    String[] DD = {"DDDD", "HHHH", "ZZZZ"};


    String[][] result = new String[4][AA.length * BB.length * CC.length * DD.length];

    int row = 0;
    for (int i = 0; i < AA.length; i++) {

        for (int j = 0; j < BB.length; j++) {

            for (int k = 0; k < CC.length; k++) {

                for (int L = 0; L < DD.length; L++) {

                    result[3][row] = DD[L];
                    result[2][row] = CC[k];
                    result[1][row] = BB[j];
                    result[0][row] = AA[i];
                    System.out.println(result[0][row] + " " +result[1][row] + " " +result[2][row] + " " +result[3][row]);
                    row++;
                }
            }
        }
    }

と出力

DDDD DDDD DDDD DDDD
DDDD DDDD DDDD HHHH
DDDD DDDD DDDD ZZZZ
DDDD DDDD HHHH DDDD
DDDD DDDD HHHH HHHH
DDDD DDDD HHHH ZZZZ
DDDD DDDD ZZZZ DDDD
...
于 2012-08-17T19:56:35.317 に答える
-1

これがあなたがやろうとしていることだと思います。多次元配列要素は単なる配列です (null に初期化されます)。また、次元の順序が逆になっています。

編集:識別子は数字で始めることはできないため、 2Darray を別のものに変更する必要もあります。(この場合、x2Darray に変更しました)。

public class multidim{
    public static void main(String[] args)
    {
        String[] AA={"DDDD", "HHHH", "ZZZZ"};
        String[] BB={"DDDD", "HHHH", "ZZZZ"};
        String[] CC={"DDDD", "HHHH", "ZZZZ"};
        String[] DD={"DDDD", "HHHH", "ZZZZ"};

        String[][] x2Darray = new String[AA.length*BB.length*CC.length*DD.length][4];

        for (int i = 0; i <AA.length; i++){
          for (int j = 0; j < BB.length; j++){
            for (int k = 0; k < CC.length; k++){
              for (int L = 0; L < DD.length; L++){
                String[] temp = {AA[i], BB[j], CC[k], DD[L]};
                x2Darray[((i*BB.length + j)*CC.length + k)*DD.length + L] = temp;
              }
            }
          }
        }

        StringBuilder s = new StringBuilder();
        for(String[] row: x2Darray){
            for(String x: row){ s.append(x); s.append(' '); }
            s.append("\n");             
        }

        System.out.println(s);
    }
}
于 2012-08-17T19:19:20.033 に答える