0

多くの行列を含むファイルを取得しています。それを 1 つの行列にまとめる必要があります。文字列を解析し、それらを配列に格納しました。受信ファイルの内容は次のとおりです

0.000 0.000 0.000
 0.000 0.000 0.000
 0.000 0.000 1.000

9.0 12.0    -3.0    
12.0    16.0    -4.0    
-3.0    -4.0    1.0

25.0    45.0    -5.0    
45.0    81.0    -9.0    
-5.0    -9.0    1.0

144.0   12.0    -12.0   
12.0    1.0 -1.0    
-12.0   -1.0    1.0

64.0    56.0    -8.0    
56.0    49.0    -7.0    
-8.0    -7.0    1.0

81.0    72.0    -9.0    
72.0    64.0    -8.0    
-9.0    -8.0    1.0

36.0    72.0    -6.0    
72.0    144.0   -12.0   
-6.0    -12.0   1.0

100.0   80.0    -10.0   
80.0    64.0    -8.0    
-10.0   -8.0    1.0 

64.0    40.0    -8.0    
40.0    25.0    -5.0    
-8.0    -5.0    1.0 

196.0   112.0   -14.0   
112.0   64.0    -8.0    
-14.0   -8.0    1.0 

要約した後、私は取得する必要があります

719.000 501.000 -75.000
 501.000 508.000 -62.000
 -75.000 -62.000 10.000

私の結果として。

私はこれを試しました。しかし、目的の出力が得られません。「A」で解析されたすべての値を取得できます

/*Parsed*/

           double[][] A = new double[keymatrix.length][keymatrix[0].length];
           for (int i = 0; i<keymatrix.length; i++) {
               for (int j = 0; j<keymatrix[0].length; j++) {
                   A[i][j] = Double.valueOf(keymatrix[i][j]);
            }
           }
          key = new double[A.length][A[0].length];

           for(int sumi = 0;sumi<A.length;sumi++){
               for(int sumj=0;sumj<A[0].length;sumj++){
                   key[sumi][sumj] += A[sumi][sumj];
               }
           }
        }//end loop and key declared as static double [][] ke

               System.out.println("final");
            for(int diai=0;diai<key.length;diai++){
                for(int diaj=0;diaj<key[0].length;diaj++){
                    System.out.print(key[diai][diaj]+"\t");

                }
                System.out.println("");

            }

出力キーをチェックすると、ke値が出力されます

反復に伴う出力

.
.
.
incoming matrix
64.0    40.0    -8.0    
40.0    25.0    -5.0    
-8.0    -5.0    1.0 
final
64.0    40.0    -8.0    
40.0    25.0    -5.0    
-8.0    -5.0    1.0
incoming matrix
196.0   112.0   -14.0   
112.0   64.0    -8.0    
-14.0   -8.0    1.0 
final
196.0   112.0   -14.0   
112.0   64.0    -8.0    
-14.0   -8.0    1.0

助言がありますか。

4

1 に答える 1

0

提供されたコードでは、ループ内でマトリックス キーを再構築しています。

ループの前に一度ビルドしてから追加する必要があります。電話することで

key = new double[A.length][A[0].length];

ループ内では、毎回その値を効果的にリセットしています。

また、2つの提案:

1)キーマトリックスに必要な値があるように見えるマトリックスAのポイントがわかりません。なぜAにコピーしてからキーにコピーするのですか?

2) マトリックスのサイズを 1 回定義しますint rows = keymatrix.length; int cols = keymatrix[0].length。次に、これらの値をどこでも使用します。コードが理解しやすくなります。

入力から読み取った次の行列を返す関数がある場合、または新しい入力がない場合は null を返す関数がある場合、次のような結果になります。

String[][] keyMatrix = read_matrix(); //reads the first matrix from input 
int rows = keyMatrix.length;
int cols = keyMatrix[0].length;
double[][] sumMatrix= new double[rows][cols];

do {
    for(int i = 0;i<rows;i++){
       for(int j=0;j<cols;j++){
          sumMatrix[i][j] +=  Double.valueOf(keyMatrix[i][j]);
       }
    }
} while (null != ( keyMatrix=read_matrix()  ));
于 2013-11-08T05:13:59.547 に答える