0

基本的に、私がやりたいことは、2 つの行列を引数として取り、それらを乗算するメソッドを作成することです。これは学校の課題であり、再帰的な「分割統治法」を使用してこれを解決するように求められました。これまでの私のコードは次のとおりです。

public class RecMult {

    public int[][] calc(int[][] a, int[][] b) {

        int n = a.length;
        int[][] c = new int[n][n];

        if (n == 1) {
            c[0][0] = a[0][0] * b[0][0];
        } else {
            int sub = a.length / 2;
            int[][] smalla11 = new int[sub][sub];
            int[][] smalla12 = new int[sub][sub];
            int[][] smalla21 = new int[sub][sub];
            int[][] smalla22 = new int[sub][sub];
            int[][] smallb11 = new int[sub][sub];
            int[][] smallb12 = new int[sub][sub];
            int[][] smallb21 = new int[sub][sub];
            int[][] smallb22 = new int[sub][sub];

            for (int i = 0; i < sub; i++) {
                for (int j = 0; j < sub; j++) {
                    smalla11[i][j] = a[i][j];
                    smalla12[sub + i][j] = a[sub + i][j];
                    smalla21[i][sub + j] = a[i][sub + j];
                    smalla22[sub + i][sub + j] = a[sub + i][sub + j];
                    smallb11[i][j] = b[i][j];
                    smallb12[sub + i][j] = b[sub + i][j];
                    smallb21[i][sub + j] = b[i][sub + j];
                    smallb22[sub + i][sub + j] = b[sub + i][sub + j];
                }
            }
            c[0][0] = calc(smalla11, smallb11);
        }
        return c;
    }
}

問題がすぐに発生したため、コードを完成させませんでした。intを取り、メソッドがint [] []を返すc[0][0]ため、に設定できません。この時点で何をすべきか実際にはわかりません。単一の int だけを返したい場合もありましたが、後で部分行列を返し、最後に完全な行列を返したいと思うこともありました。このリターンの問題を「修正」する方法、またはそのようなプログラムのコードを作成する方法についてのより良いアイデアについて、誰か提案はありますか?calc(smalla11, smallb11)calc

4

1 に答える 1

0

2 次元配列 (calc(smalla11, smallb11) の結果) を 1 つの要素 c[0,0] に格納しようとしています。c は既に 2 次元配列として宣言されています。意図的に結果を単一のポイント 0,0 に格納しようとしていますか?

これはあなたが必要とすることをしますか?

c =  calc(smalla11, smallb11);

これは私の脳を傷つけますが、楽しいです!:)

于 2014-01-28T20:58:03.143 に答える