追記2
教えていただいたことを参考に
getterやsetterを書き加えました
まだ正しく記述できておらず、コンパイルエラーが出ている状態のため
修正の方法についてお聞きしたいです
追記1
最初に質問した内容(上のプログラムについて)は回答していただいた方のおかげで解決しました。
続けて質問させていただくために修正後のプログラムを最初のプログラムの下に追加させていただきました。
修正後のプログラムには以下のようなエラーが表示されました。
ーーーーーーーーーーーーーーーーー
Matrix.java:39: エラー: シンボルを見つけられません
matrix.print();
^
シンボル: メソッド print()
場所: タイプdouble[][]の変数 matrix
Matrix.java:74: エラー: 不適合な型: Matrixをdouble[][]に変換できません:
A = y.read(args[0]);
^
Matrix.java:76: エラー: 不適合な型: Matrixをdouble[][]に変換できません:
B = z.read(args[1]);
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
※以下最初の質問の内容
「テキストファイルから行列データを読み込み二次元配列に保存したものを表示する」プログラムを作成、
コンパイルしたところ
以下のようなエラーメッセージが表示されました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Matrix.java:26: エラー: '.class'がありません
while (int M=0 < row && (line = br.readLine()) != null){
^
Matrix.java:26: エラー: ';'がありません
while (int M=0 < row && (line = br.readLine()) != null){
^
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
これはどのような原因が考えられるでしょうか?
テキストファイルの例
3 3 ←行と列の数を表す
0.11 0.03 0.1 ←以下行列の要素
0.2 0.22 0.66
0.4 0.56 0.09
getRow、getColumメソッドにより指定されたファイルから1行読み込み、行と列の数を取得する
readメソッドにより以降の行も順に読んでいき、二次元配列に保存する
printメソッドにより表示を行う
といった流れのプログラムです
JDK8を使用しています
java
1//最初の質問に関するプログラム 2import java.io.*; 3public class Matrix{ 4 private int row,col; 5 public Matrix(); 6 public Matrix(int M,int N){ 7 this.row=M; 8 this.col=N; 9 } 10 private double[][] matrix = new double [row][col]; 11 public int getRow(String filename){ 12 BufferedReader br = new BufferedReader(new FileReader(fileName)); 13 String[] M = br.split("\s"); 14 int m = Integer.parseInt(M[0]); 15 return m; 16 } 17 public int getColumn(String filename){ 18 BufferedReader br = new BufferedReader(new FileReader(fileName)); 19 String[] N = br.split("\s"); 20 int n = Integer.parseInt(N[1]); 21 return n; 22 } 23 public Matrix read(String filename){ 24 try (BufferedReader br = new BufferedReader(new FileReader(filename))){ 25 String[] rowcol = br.readLine().split(" "); 26 String line = null; 27 while (int M=0 < row && (line = br.readLine()) != null){ 28 String[] record = line.split(" "); 29 for (int N = 0; N < col ; N++) { 30 matrix[M][N] = Double.parseDouble(record[N]); 31 } 32 M++; 33 } 34 matrix.print(); 35 } 36 catch (FileNotFoundException e) { 37 e.printStackTrace(); 38 } 39 catch (IOException e) { 40 e.printStackTrace(); 41 } 42 catch (NumberFormatException e) { e.printStackTrace(); 43 } 44 } 45 public void print(){ 46 for (double[] record : matrix) { 47 for (double d : record) { 48 System.out.print(d + " "); 49 } 50 System.out.println(); 51 } 52 } 53 public static void main(String[] args){ 54 if (args.length != 2) { 55 System.out.println("need two files"); System.exit(1); 56 } 57 int arow,acol,brow,bcol; 58 Matrix x = new Matrix(); 59 arow=x.getrow(args[0]); 60 acol=x.getColumn(args[0]); 61 brow=x.getrow(args[1]); 62 bcol=x.getColumn(args[1]); 63 double [ ][ ] A = new double [arow][acol]; 64 double [ ][ ] B = new double [brow][bcol]; 65 double [ ][ ] C = new double [acol][brow]; 66 Matrix x = new Matrix(arow,acol); 67 Matrix A = x.read(args[0]); 68 Matrix x = new Matrix(brow,bcol); 69 Matrix B = x.read(args[1]); 70 } 71}
java
1//次の質問に関するプログラム 2import java.io.*; 3import java.io.FileInputStream; 4import java.io.InputStreamReader; 5public class Matrix{ 6 private int row,col; 7 public Matrix(){ 8 } 9 public Matrix(int M,int N){ 10 this.row=M; 11 this.col=N; 12 } 13 private double[][] matrix = new double [row][col]; 14 public int getRow(String filename){ 15 BufferedReader br = new BufferedReader(new FileReader(filename)); 16 String rline = br.readLine(); 17 String[] R = rline.split("\s"); 18 int m = Integer.parseInt(R[0]); 19 return m; 20 } 21 public int getColumn(String filename){ 22 BufferedReader br = new BufferedReader(new FileReader(filename)); 23 String cline = br.readLine(); 24 String[] C = cline.split("\s"); 25 int n = Integer.parseInt(C[1]); 26 return n; 27 } 28 public Matrix read(String filename){ 29 try (BufferedReader br = new BufferedReader(new FileReader(filename))){ 30 String[] rowcol = br.readLine().split(" "); 31 String line = null; 32 int M=0; 33 while (M < row && (line = br.readLine()) != null){ 34 String[] record = line.split(" "); 35 for (int N = 0; N < col ; N++) { 36 matrix[M][N] = Double.parseDouble(record[N]); 37 } 38 M++; 39 } 40 matrix.print(); 41 } 42 catch (FileNotFoundException e) { 43 e.printStackTrace(); 44 } 45 catch (IOException e) { 46 e.printStackTrace(); 47 } 48 catch (NumberFormatException e) { 49 e.printStackTrace(); 50 } 51 } 52 public void print(){ 53 for(int i = 0; i<row; i++){ 54 for(int j = 0; j<col; j++){ 55 System.out.println(matrix[i][j]); 56 } 57 } 58 59 } 60 public static void main(String[] args){ 61 if (args.length != 2) { 62 System.out.println("need two files"); 63 System.exit(1); 64 } 65 int arow,acol,brow,bcol; 66 Matrix x = new Matrix(); 67 arow=x.getRow(args[0]); 68 acol=x.getColumn(args[0]); 69 brow=x.getRow(args[1]); 70 bcol=x.getColumn(args[1]); 71 double [ ][ ] A = new double [arow][acol]; 72 double [ ][ ] B = new double [brow][bcol]; 73 double [ ][ ] C = new double [acol][brow]; 74 Matrix y = new Matrix(arow,acol); 75 A = y.read(args[0]); 76 Matrix z = new Matrix(brow,bcol); 77 B = z.read(args[1]); 78 } 79}
java
1//getterやsetterを利用した形 2import java.io.*; 3import java.io.FileInputStream; 4import java.io.InputStreamReader; 5public class Matrix{ 6 private int row,col; 7 public Matrix(){ 8 } 9 public Matrix(int M,int N){ 10 this.row=M; 11 this.col=N; 12 } 13 private double[][] matrix = new double [row][col]; 14 public int getRow(String filename){ 15 BufferedReader br = new BufferedReader(new FileReader(filename)); 16 String rline = br.readLine(); 17 String[] R = rline.split("\s"); 18 int m = Integer.parseInt(R[0]); 19 return m; 20 } 21 public int getColumn(String filename){ 22 BufferedReader br = new BufferedReader(new FileReader(filename)); 23 String cline = br.readLine(); 24 String[] C = cline.split("\s"); 25 int n = Integer.parseInt(C[1]); 26 return n; 27 } 28 public Matrix read(String filename){ 29 try (BufferedReader br = new BufferedReader(new FileReader(filename))){ 30 String[] rowcol = br.readLine().split(" "); 31 String line = null; 32 int M=0; 33 while (M < row && (line = br.readLine()) != null){ 34 String[] record = line.split(" "); 35 for (int N = 0; N < col ; N++) { 36 matrix[M][N] = Double.parseDouble(record[N]); 37 } 38 M++; 39 } 40 print(); 41 } 42 catch (FileNotFoundException e) { 43 e.printStackTrace(); 44 } 45 catch (IOException e) { 46 e.printStackTrace(); 47 } 48 catch (NumberFormatException e) { 49 e.printStackTrace(); 50 } 51 } 52 public void print(){ 53 for(int i = 0; i<row; i++){ 54 for(int j = 0; j<col; j++){ 55 System.out.println(matrix[i][j]); 56 } 57 } 58 } 59 public void setmatrix(double[][] MAT) { 60 MAT=this.matrix; 61 } 62 public double[][] getmatrix(){ 63 return MAT; 64 } 65 public 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=matrix; 83 Matrix z = new Matrix(brow,bcol); 84 z.read(args[1]); 85 z.setmatrix(B); 86 B=matrix; 87 } 88}
回答3件
あなたの回答
tips
プレビュー