Проблемы с печатью при умножении 2-х матриц - PullRequest
1 голос
/ 11 мая 2019

Я пытаюсь сложить, минус и умножить две матрицы, сумма и минус сработали правильно, но при выполнении умножения результат печати дает 0 в качестве результата. Извините за испанские переменные, я должен поставить свою школьную работу на испанском языке.

package Segundo_Parcial;

import java.util.Scanner;

public class matriz {

    private Scanner teclado;
    private int[][] matriz1;
    private int[][] matriz2;
    private int[][] suma;
    private int[][] resta;
    private int[][] multi;
    private float[][] divi;

    public void Datos() {
        teclado = new Scanner(System.in);
        matriz1 = new int[5][5];
        matriz2 = new int[5][5];
        suma = new int[5][5];
        resta = new int[5][5];
        multi = new int[5][5];
        divi = new float[5][5];

        System.out.println("             [ Matriz 1 ]              ");
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                System.out.println("Ingresa los numeros en la posicion [" + i + "][" + j + "] :");
                matriz1[i][j] = teclado.nextInt();
            }
        }
        System.out.println("             [ Matriz 2 ]              ");
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                System.out.println("Ingresa los numeros en la posicion [" + i + "][" + j + "] :");
                matriz2[i][j] = teclado.nextInt();

            }
        }

    }

    public void sumaYresta() {


        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                suma[i][j] = matriz1[i][j] + matriz2[i][j];

            }
        }
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                resta[i][j] = matriz1[i][j] - matriz2[i][j];
            }
        }


    }
    public void Multiplicacion(){
        int x=0, jd=0, id=0,i=0,j=0, resul=0; 

        for(i=0;i<5;){
            for(j=0;j<5;){
                for(jd=0;jd<5;jd++){
                    resul = matriz1[i][jd] * matriz2[jd][j];
                    resul+=resul;
                    if(jd==4){
                        for(int c=0;c<5;c++){
                            for(int c2=0;c2<5;c2++){
                                multi[c][c2]= resul;
                                resul=0;
                            }
                        }
                        j++;
                        if(j==4){
                            i++; 
                        }
                    }
                }
            } 
        }
    }

    public void Imprimir() {

        System.out.println("             [ RESULDATO DE LA SUMA ]              ");
        for (int c = 0; c < 5; c++) {
            for (int c2 = 0; c2 < 5; c2++) {
                System.out.print("[" + multi[c][c2] + "]");
            }
            System.out.println("");
        }
//
//        System.out.println("             [ RESULDATO DE LA RESTA ]              ");
//        for (int i = 0; i < 5; i++) {
//            for (int j = 0; j < 5; j++) {
//                System.out.print("[" + resta[i][j] + "]");
//            }
//            System.out.println("");
//
//        }
    }




    public static void main(String[] args) {

        matriz matri = new matriz();
        matri.Datos();
        matri.sumaYresta();
        matri.Imprimir();

    }

}

Он должен напечатать соответствующий результат, но вместо этого он печатает "0" Я не уверен, какая часть моего кода не работает. У кого-нибудь есть идея? Спасибо:)

1 Ответ

1 голос
/ 11 мая 2019

Полагаю, вы хотите, чтобы умножение происходило внутри «Умножения», поэтому я изменил его на следующее:

public void multiplication(){
    for (int cm = 0; cm < 5; cm++) {
        for (int cn = 0; cn < 5; cn++) {
            int result = 0;
            for (int i = 0; i < 5; i++) {
                result += this.matriz1[cm][i] * this.matriz2[i][cn];
            }
            this.multi[cm][cn] = result;
        }
    }
}

Вы также должны вызывать его в основном методе, поэтому перед выводом результата добавьте:

matri.multiplicacion();

И когда вы говорите, что это для школы, я бы порекомендовал вам взглянуть на ваш стиль кода, такие как соглашения об именах и наиболее важные английские имена переменных и комментарии.(Если ваш учитель не сказал вам иначе, тогда игнорируйте то, что я только что сказал:)

Это делает ваш код настолько профессиональным.

Кроме того, решение очень специфичное, и вы, вероятно, сделаете что-то другоедля переменного размера матрицы.

...