Как отформатировать матричное умножение в java - PullRequest
1 голос
/ 19 марта 2020

Итак, для этой части моей домашней работы мне нужно сделать матричное умножение, и вот общие критерии:

enter image description here

Что касается вычисления идет, у меня не было никаких проблем, однако, мой профессор говорит, что если любой двойной в компоненте равен .00, он должен быть представлен как целое число, например, 24 в (ij) = a (13) = 24, как вы видите в пример домашней работы. Однако, в моем случае, независимо от того, что я пытаюсь, я не могу получить целое число 24, не избавившись от десятичного формата.

Кроме того, когда я распечатываю свой результат, я начинаю с новой строки, которая отличается от последней строки вывода: «Умножение матриц:»

В то время как пример домашней работы показывает первую строку умноженной матрицы на той же строке, что и вывод, и идеально отформатирован для следующих строк.

Кто-нибудь, пожалуйста, помогите. Я не знаю, почему мой профессор так строго относится к дизайну, а не к функциям, но я пытался понять это несколько часов, и я застрял.

enter image description here

import java.text.DecimalFormat;

import java.util.Scanner;


public class ProblemFour {


public static void main(String[] args){

    System.out.print("Enter matrix1: ");

    Scanner stdin = new Scanner(System.in);

    String a = stdin.nextLine();

    System.out.print("Enter matrix2: ");

    String b = stdin.nextLine();

    ProblemFour o = new ProblemFour();

    double[][] matrixA = new double[3][3];
    double[][] matrixB = new double[3][3];


    String[] nums1 = a.split(" ");
    String[] nums2 = b.split(" ");

    if(nums1.length == nums2.length){
        matrixA = o.makeMatrix(nums1);
        matrixB = o.makeMatrix(nums2);
        double[][] matrixC = o.multiplyMatrix(matrixA, matrixB);

        for(int i =0; i<3; i++){
            System.out.println(" ");
            if(i==0){
                System.out.println("Multiplication of the matrices is: ");
            }
            System.out.println(" ");
            for(int j=0; j<3; j++){
                System.out.print(matrixC[i][j] + " ");
            }


        }


    }else{
        System.out.println("matrix1 column not equal to matrix2 row");
        stdin.close();
    }


}

public double[][] makeMatrix(String[] nums){
    double[][] matrix = new double[3][3];
    for(int i=0; i<matrix.length; i++){
        for(int j=0; j<matrix[0].length; j++){

            int n = matrix[j].length*i +j;
            matrix[i][j] = Double.parseDouble(nums[n]);

        }
    }
    return matrix;
}


public static double[][] multiplyMatrix(double[][]a, double[][]b){
    double totalElem = 0.0;
    double[][] multipliedMatrix = new double[3][3];
    for(int i=0; i<3; i++){
        for(int j=0; j<3; j++){
            for(int k=0; k<3; k++){
                DecimalFormat df = new DecimalFormat("##.#");
                double current = a[i][k] * b[k][j];
                double newdf = Double.parseDouble(df.format(current));

                totalElem += newdf;
                if(k==2){
                    int roundInt = (int)totalElem;

                    if(totalElem-roundInt==0.0){
                        multipliedMatrix[i][j] = roundInt;
                    }
                    else{
                        multipliedMatrix[i][j] = totalElem;
                    }
                    totalElem=0;
                }
            }
        }
    }
    return multipliedMatrix;

}

}

1 Ответ

0 голосов
/ 19 марта 2020

Давайте дадим вам подсказки

...
String.format("%4d",(int)elem)
...
String.format("%2.1f",elem)

, также вам понадобится

Как проверить, является ли двойное число целым

...