追記
下のプログラムのような方法ではprivateな変数にアクセスできないということでしたので
他にアクセスできるような方法はないでしょうか
2つ目の「C=A.multiply(B)」に関する質問は継続中です
以下、元の質問
「テキストファイルから行列データを読み込み二次元配列に保存したものを表示する」プログラムを作成したところ
コンパイル時に以下のようなエラーが表示されました
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Matrix.java:63: エラー: staticでない変数 matrixをstaticコンテキストから参照す ることはできません
return matrix;
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
どのように修正すればよいか教えていただきたいです
またこのプログラムに加えて、
「テキストファイルから読み込んだAB2つの行列の積Cを計算するMultiplyメソッド」も追加したいと考えています
そのメソッドの呼び出し方として
C=A.multiply(B)
としたいのですが
計算方法自体はわかっても、どのようにデータを取得しそのデータをCに返すのかが分かりません。
これについても何かアイデアをいただきたいです
テキストファイルの例(スペース区切り)
3 3 ←行と列の数を表す
0.11 0.03 0.1 ←以下行列の要素
0.2 0.22 0.66
0.4 0.56 0.09
行列A、Bそれぞれについて
getRow、getColumメソッドにより指定されたファイルから1行読み込み、行(row)と列(col)の数を取得する
readメソッドにより以降の行も順に読んでいき、二次元配列に保存する
printメソッドにより表示を行う
といった流れのプログラムです
getter、setter以外のメソッドの型や引数などは極力そのままでお願いしたいです
JDK8を使用しています
java
1import java.io.*; 2import java.io.FileInputStream; 3import java.io.InputStreamReader; 4public class Matrix{ 5 private int row,col; 6 public Matrix(){ 7 } 8 public Matrix(int M,int N){ 9 this.row=M; 10 this.col=N; 11 } 12 private double[][] matrix = new double [row][col]; 13 public int getRow(String filename){ 14 BufferedReader br = new BufferedReader(new FileReader(filename)); 15 String rline = br.readLine(); 16 String[] R = rline.split("\s"); 17 int m = Integer.parseInt(R[0]); 18 return m; 19 } 20 public int getColumn(String filename){ 21 BufferedReader br = new BufferedReader(new FileReader(filename)); 22 String cline = br.readLine(); 23 String[] C = cline.split("\s"); 24 int n = Integer.parseInt(C[1]); 25 return n; 26 } 27 public Matrix read(String filename){ 28 try (BufferedReader br = new BufferedReader(new FileReader(filename))){ 29 String[] rowcol = br.readLine().split(" "); 30 String line = null; 31 int M=0; 32 while (M < row && (line = br.readLine()) != null){ 33 String[] record = line.split(" "); 34 for (int N = 0; N < col ; N++) { 35 matrix[M][N] = Double.parseDouble(record[N]); 36 } 37 M++; 38 } 39 print(); 40 } 41 catch (FileNotFoundException e) { 42 e.printStackTrace(); 43 } 44 catch (IOException e) { 45 e.printStackTrace(); 46 } 47 catch (NumberFormatException e) { 48 e.printStackTrace(); 49 } 50 } 51 public void print(){ 52 for(int i = 0; i<row; i++){ 53 for(int j = 0; j<col; j++){ 54 System.out.println(matrix[i][j]); 55 } 56 } 57 58 } 59 public void setmatrix(double[][] MAT) { 60 this.matrix=MAT; 61 } 62 public static double[][] getmatrix(){ 63 return matrix; 64 } 65 public static void main(String[] args){ 66 if (args.length != 2) { 67 System.out.println("need two files"); 68 System.exit(1); 69 } 70 int arow,acol,brow,bcol; 71 Matrix x = new Matrix(); 72 arow=x.getRow(args[0]); 73 acol=x.getColumn(args[0]); 74 brow=x.getRow(args[1]); 75 bcol=x.getColumn(args[1]); 76 double [ ][ ] A = new double [arow][acol]; 77 double [ ][ ] B = new double [brow][bcol]; 78 double [ ][ ] C = new double [acol][brow]; 79 Matrix y = new Matrix(arow,acol); 80 y.read(args[0]); 81 y.setmatrix(A); 82 A=getmatrix(); 83 Matrix z = new Matrix(brow,bcol); 84 z.read(args[1]); 85 z.setmatrix(B); 86 B=getmatrix(); 87 } 88}