Advertisement
Guest User

Untitled

a guest
Apr 24th, 2020
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.86 KB | None | 0 0
  1. // 2020/4/22(水)~25(土)
  2.  
  3. import java.io.*;
  4. import java.util.Scanner;
  5.  
  6. public class Gyoretsu5_1 {
  7. public static void main(String[] args) throws IOException {
  8. System.out.println("2つの行列の積を求めます");
  9.  
  10. System.out.println("\n行列Aを入力します");
  11. double[][] matrixA;
  12. if (args.length == 0) {
  13. matrixA = inputMatrix();
  14. } else if (args[0].equals("-i") && args.length == 3) {
  15. /*
  16. FileReader fr = new FileReader(args[1]);
  17. int ic = fr.read();
  18. while (ic != -1) {
  19. char c = (char) ic;
  20. ic = fr.read();
  21. }
  22. fr.close();
  23. */
  24. return;
  25. } else if (args[3].equals("-i") && args.length == 6) {
  26. return;
  27. } else {
  28. return;
  29. }
  30. System.out.println("行列Aを出力します");
  31. printMatrix(matrixA);
  32.  
  33. System.out.println("\n行列Bを入力します");
  34. double[][] matrixB;
  35. if (args.length == 0) {
  36. matrixB = inputMatrix();
  37. } else if (args[0].equals("-i") && args.length == 3) {
  38. return;
  39. } else if (args[3].equals("-i") && args.length == 6) {
  40. return;
  41. } else {
  42. return;
  43. }
  44. System.out.println("行列Bを出力します");
  45. printMatrix(matrixB);
  46.  
  47. System.out.println("\n積ABを計算します");
  48. double[][] matrixAB = multiplyMatrix(matrixA, matrixB);
  49. System.out.println("積ABを出力します");
  50. if (args.length == 0) {
  51. printMatrix(matrixAB);
  52. } else if (args[0].equals("-o") && args.length == 3) {
  53. writeFile(args[1], matrixAB);
  54. } else if (args[3].equals("-o") && args.length == 6) {
  55. writeFile(args[4], matrixAB);
  56. } else {
  57. return;
  58. }
  59.  
  60. System.out.println("\n積BAを計算します");
  61. double[][] matrixBA = multiplyMatrix(matrixB, matrixA);
  62. System.out.println("積BAを出力します");
  63. if (args.length == 0) {
  64. printMatrix(matrixBA);
  65. } else if (args[0].equals("-o") && args.length == 3) {
  66. writeFile(args[2], matrixBA);
  67. } else if (args[3].equals("-o") && args.length == 6) {
  68. writeFile(args[5], matrixBA);
  69. } else {
  70. return;
  71. }
  72. }
  73.  
  74. public static double[][] inputMatrix() {
  75. Scanner scanner = new Scanner(System.in);
  76. System.out.println("行列の行の大きさを自然数で入力して下さい");
  77. int row = scanner.nextInt();
  78. System.out.println("行列の列の大きさを自然数で入力して下さい");
  79. int column = scanner.nextInt();
  80. double[][] matrix = new double[row][column];
  81. for (int i = 0; i < row; i++) {
  82. for (int j = 0; j < column; j++) {
  83. System.out.println("行列の" + (i + 1) + "行" + (j + 1) + "列の要素の値(実数)を入力して下さい");
  84. matrix[i][j] = scanner.nextDouble();
  85. }
  86. }
  87. return matrix;
  88. }
  89.  
  90. public static void printMatrix(double[][] matrix) {
  91. if (matrix == null) {
  92. System.out.println("表示はありません");
  93. return;
  94. }
  95. for (int i = 0; i < matrix.length; i++) {
  96. for (int j = 0; j < matrix[0].length; j++) {
  97. System.out.print(matrix[i][j] + " ");
  98. }
  99. System.out.println();
  100. }
  101. }
  102.  
  103. public static double[][] multiplyMatrix(double[][] matrix1, double[][] matrix2) {
  104. if (matrix1[0].length != matrix2.length) {
  105. System.out.println("この2つの行列はこの順では積が求められません");
  106. return null;
  107. }
  108. double[][] product = new double[matrix1.length][matrix2[0].length];
  109. for (int i = 0; i < matrix1.length; i++) {
  110. for (int j = 0; j < matrix2[0].length; j++) {
  111. for (int k = 0; k < matrix1[0].length /* matrix2.lengthでも同じ */ ; k++) {
  112. product[i][j] += matrix1[i][k] * matrix2[k][j];
  113. }
  114. }
  115. }
  116. return product;
  117. }
  118.  
  119. public static void writeFile(String filename, double[][] matrix) throws IOException {
  120. if (matrix == null) {
  121. System.out.println("書き込みはありません");
  122. return;
  123. }
  124. FileWriter fw = new FileWriter(filename); // ファイル上書き
  125. for (int i = 0; i < matrix.length; i++) {
  126. for (int j = 0; j < matrix[0].length; j++) {
  127. fw.write(matrix[i][j] + " ");
  128. }
  129. fw.write("\n");
  130. }
  131. fw.flush();
  132. fw.close();
  133. System.out.println("ファイル" + filename + "に書き込みました");
  134. }
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement