Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 2020/4/22(水)~25(土)
- import java.io.*;
- import java.util.Scanner;
- public class Gyoretsu5_1 {
- public static void main(String[] args) throws IOException {
- System.out.println("2つの行列の積を求めます");
- System.out.println("\n行列Aを入力します");
- double[][] matrixA;
- if (args.length == 0) {
- matrixA = inputMatrix();
- } else if (args[0].equals("-i") && args.length == 3) {
- /*
- FileReader fr = new FileReader(args[1]);
- int ic = fr.read();
- while (ic != -1) {
- char c = (char) ic;
- ic = fr.read();
- }
- fr.close();
- */
- return;
- } else if (args[3].equals("-i") && args.length == 6) {
- return;
- } else {
- return;
- }
- System.out.println("行列Aを出力します");
- printMatrix(matrixA);
- System.out.println("\n行列Bを入力します");
- double[][] matrixB;
- if (args.length == 0) {
- matrixB = inputMatrix();
- } else if (args[0].equals("-i") && args.length == 3) {
- return;
- } else if (args[3].equals("-i") && args.length == 6) {
- return;
- } else {
- return;
- }
- System.out.println("行列Bを出力します");
- printMatrix(matrixB);
- System.out.println("\n積ABを計算します");
- double[][] matrixAB = multiplyMatrix(matrixA, matrixB);
- System.out.println("積ABを出力します");
- if (args.length == 0) {
- printMatrix(matrixAB);
- } else if (args[0].equals("-o") && args.length == 3) {
- writeFile(args[1], matrixAB);
- } else if (args[3].equals("-o") && args.length == 6) {
- writeFile(args[4], matrixAB);
- } else {
- return;
- }
- System.out.println("\n積BAを計算します");
- double[][] matrixBA = multiplyMatrix(matrixB, matrixA);
- System.out.println("積BAを出力します");
- if (args.length == 0) {
- printMatrix(matrixBA);
- } else if (args[0].equals("-o") && args.length == 3) {
- writeFile(args[2], matrixBA);
- } else if (args[3].equals("-o") && args.length == 6) {
- writeFile(args[5], matrixBA);
- } else {
- return;
- }
- }
- public static double[][] inputMatrix() {
- Scanner scanner = new Scanner(System.in);
- System.out.println("行列の行の大きさを自然数で入力して下さい");
- int row = scanner.nextInt();
- System.out.println("行列の列の大きさを自然数で入力して下さい");
- int column = scanner.nextInt();
- double[][] matrix = new double[row][column];
- for (int i = 0; i < row; i++) {
- for (int j = 0; j < column; j++) {
- System.out.println("行列の" + (i + 1) + "行" + (j + 1) + "列の要素の値(実数)を入力して下さい");
- matrix[i][j] = scanner.nextDouble();
- }
- }
- return matrix;
- }
- public static void printMatrix(double[][] matrix) {
- if (matrix == null) {
- System.out.println("表示はありません");
- return;
- }
- for (int i = 0; i < matrix.length; i++) {
- for (int j = 0; j < matrix[0].length; j++) {
- System.out.print(matrix[i][j] + " ");
- }
- System.out.println();
- }
- }
- public static double[][] multiplyMatrix(double[][] matrix1, double[][] matrix2) {
- if (matrix1[0].length != matrix2.length) {
- System.out.println("この2つの行列はこの順では積が求められません");
- return null;
- }
- double[][] product = new double[matrix1.length][matrix2[0].length];
- for (int i = 0; i < matrix1.length; i++) {
- for (int j = 0; j < matrix2[0].length; j++) {
- for (int k = 0; k < matrix1[0].length /* matrix2.lengthでも同じ */ ; k++) {
- product[i][j] += matrix1[i][k] * matrix2[k][j];
- }
- }
- }
- return product;
- }
- public static void writeFile(String filename, double[][] matrix) throws IOException {
- if (matrix == null) {
- System.out.println("書き込みはありません");
- return;
- }
- FileWriter fw = new FileWriter(filename); // ファイル上書き
- for (int i = 0; i < matrix.length; i++) {
- for (int j = 0; j < matrix[0].length; j++) {
- fw.write(matrix[i][j] + " ");
- }
- fw.write("\n");
- }
- fw.flush();
- fw.close();
- System.out.println("ファイル" + filename + "に書き込みました");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement