0

すべての組み合わせをジャグ配列で表示する関数を作成しようとしています。各組み合わせには、各サブ配列の 1 つの要素が含まれています。ジャグ配列は任意の数の配列で構成でき、各配列は任意の数の要素を持つことができます。たとえば、次の配列の場合: a[0] = {1, 3, 5} a[1] = {2, 4} 返される必要があります: (1, 2) (1, 4) (3, 2) (3, 4) (5, 2) (5, 4)

このようにしようと思ったのですが、すぐに問題が発生しました。論理的には 1, 2 と 1, 4 を取得しても問題ないように見えますが、次の実行では I が 0 に戻されます (申し訳ありませんが、今テストする開発マシンではありません)。誰でもより良い解決策を提案できますか?

これが私のコードです

for (int i = 0; i < array1.length(); i++)
    for (int j = 0; j < array2.length(); j++)

        if (j < array2.length())
            i = 0;
        else 
            i++;

        System.out.println(array1[i] "," array2[j])
4

6 に答える 6

1

これは必要ありません:

if (j < array2.length())
            i = 0;
        else 
            i++;

i は for ループで自動的にインクリメントされます。

これで問題ありません。

for (int i = 0; i < array1.length(); i++)
    for (int j = 0; j < array2.length(); j++)
        System.out.println(array1[i] "," array2[j])
于 2013-06-18T16:54:39.240 に答える
0

これは、任意の数の配列で機能する一般的なソリューションです (このアルゴリズムの実行時の指数関数的な性質に注意してください)。

int[][] arrays = new int[][]
{
    {1, 2, 3, 4, 5, 6},
    {1, 2, 3, 4, 5, 6}, 
    {1, 2, 3, 4, 5, 6}
}; // let's print all fair rolls of a 3d6

if (arrays.length == 0) return; // this is why we can't have nice things

int[] currentPos = new int[arrays.length];

while(currentPos[arrays.length - 1] != arrays[arrays.length - 1].length)
{
    // print the current value
    System.out.print(arrays[0][currentPos[0]]);
    for (int i = 1; i < arrays.length; ++i)
        System.out.print(", " + arrays[i][currentPos[i]]);
    System.out.println();

    // increment the "counter"
    ++currentPos[0];
    for (int i = 1; i < arrays.length; ++i)
    {
        if (currentPos[i - 1] == arrays[i - 1].length)
        {
            currentPos[i - 1] = 0;
            ++currentPos[i];
        }
        else break;
    }
}
于 2013-06-18T17:27:46.960 に答える
0

私があなたの質問を正しく理解していれば(私はそうではないかもしれません)、あなたが必要とするのはただ

for (int i = 0; i < array1.length(); i++){
  for (int j = 0; j < array2.length(); j++){
    System.out.println(array1[i] "," array2[j]);
  }
}

望ましい結果を達成するために

于 2013-06-18T16:53:42.507 に答える
0

これはどう:

int a [] = {1,2,3}; int b[] = {1,2};

for (int i = 0; i < b.length; i++) {
    for (int j = 0; j < a.length; j++) {
        System.out.println(a[i]+","+a[j]);

    }

}
于 2013-06-18T16:54:01.370 に答える
0

ループif内のステートメントはすべてを壊します。タスクを完了するには、2 つのネストされたループが必要です。

for (int i = 0; i < array1.length(); i++)
    for (int j = 0; j < array2.length(); j++) {
        System.out.println(array1[i] + "," + array2[j]);
    }
}
于 2013-06-18T16:54:21.417 に答える
0
for (int i = 0; i < array1.length(); i++)
    for (int j = 0; j < array2.length(); j++)
        System.out.println("(" + array1[i] + "," array2[j] + ")");
于 2013-06-18T16:54:43.293 に答える