申し訳ありませんが、私はpicrossボードを解決するためにJavaプログラムを作成しようとしていますが、私はStackoverflowエラーを取得し続けます。私は現在、ちょっとしたJavaを教えているだけなので、私の方法は明らかに効率的ではありませんが、私は解決策をオンラインで見つけるよりも、私が知っていることを利用したいと思っています。私がこれを解決すると考えることができる唯一の方法はあらゆる可能性を試して、一種の力ずくであった。問題は、より大きなボードでは機能が終了する前にエラーが発生する傾向があることです。再帰的なStackoverflowエラー
だからchar[][] a
はすべてのXとOを持つゲームボードです。 int[][] b
は、picrossボードに割り当てられた番号がゲームの左上と左にあるような配列です。 isDone()
は、ボードが指定された数字と一致するかどうかを確認し、shift()
は1つの列を下にシフトします。プログラム全体を貼り付けたくないので、もっと情報が必要な場合は教えてください。ありがとう!
誰かが尋ねてからshiftのコードを追加しました。 Shiftキーを押すと、1行のすべての文字が1つのセルに移動します。
更新:私のコードがすべての組み合わせを回転していない可能性がありますので、正解をスキップします。誰もが実際にすべての可能な組み合わせを試していることを確認することはできますか?それはなぜ私がstackoverflowエラーを取得しているのかを説明します。一方で、それはあまりにも多くなる前に、これが何回繰り返されますか?
public static void shifter(char[][] a, int[][] b, int[] clockwork)
{
boolean correct = true;
correct = isDone(a, b);
if(correct)
return;
clockwork[a[0].length - 1]++;
for(int x = a[0].length - 1; x > 0; x--)
{
if(clockwork[x] > a.length)
{
shift(a, x - 1);
clockwork[x - 1]++;
clockwork[x] = 1;
}
correct = isDone(a, b);
if(correct)
return;
}
shift(a, a[0].length - 1);
correct = isDone(a, b);
if(correct)
return;
shifter(a, b, clockwork);
return;
}
public static char[][] shift(char[][] a, int y)
{
char temp = a[0][y];
for(int shifter = 0; shifter < a.length - 1; shifter++)
{
a[shifter][y] = a[shifter + 1][y];
}
a[a.length - 1][y] = temp;
return a;
}
繰り返し回数/再帰回数が爆発した後 – Tom
[] []を返すのではなく、シフターをvoid関数にすることを検討してください。 a [] []はすでにjavaで参照渡しされています。 – Tom
ええと、私は正確に何回繰り返しているのかは分かりません。それは5x5ボードの良い部分のようです。クラッシュする前にどれくらい処理できますか?シフターをボイド関数にする方法は? –