0

数独ジェネレーターを書いています。

static void change(int[][] x, int[][] y, int[][] z, int[][] w, int[][] u, int k) {
    int a = r1.nextInt(9);
    int b = r2.nextInt(2);
    int c = r3.nextInt(2);
    if (x[b][c] != 0 && vcheck(a, c, x, y, z) != false && hcheck(a, b, x, u, w) != false && tcheck(a, x) != false) {
        x[b][c] = a;
        k--;
    } else change(x, y, z, w, u, k);
}

プログラムのこの部分は、ランダムに生成された位置 (b、c) のテーブルの数値を値 a に変更することを開始する void です。スローされたエラーは

Exception in thread "main" java.lang.StackOverflowError
    at java.util.Random.nextInt(Random.java:307)

誰かが私に何を変えるべきか教えてもらえますか?

4

1 に答える 1

1

StackOverflowError は、再帰が深すぎる場合に得られるものです。これは通常、設計エラーの兆候です。乱数ジェネレーターが再帰の深さを制御できるようにしているようです。VM がスタック スペースを使い果たす前に、RNG が再帰呼び出しを回避するために必要な数を生成することが保証されていないため、これは間違いなく悪い考えです。

他にも問題があります。このコード行は、特定のコンテキストでは何も役に立たないようです。

k--;

おそらく、アルゴリズムをもう少し検討する必要があります。

于 2012-06-25T14:32:38.980 に答える