Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Срочно нужна ваша помощь по JAVA / 11 сообщений из 11, страница 1 из 1
04.08.2018, 21:38
    #39683355
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна ваша помощь по JAVA
Надо написать метод Multiple который умножает две матрицы, остальные методы написаны. Помогите буду благодарна вам)
Здесь нужно выводить
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
package matrix;

import java.util.LinkedList;
import java.util.List;

public class Main extends Exception {

    public static void main(String[] args) throws MatrixIndexException {Matrix m1 = new Matrix(3, 3);
        Matrix m2 = new Matrix(3, 3);
        
        MatrixUtils.fillByRandom(m1);
        MatrixUtils.fillByRandom(m2);
        
        Matrix m = MatrixUtils.MatrixMultiple(m1, m2);
        
        System.out.println(m.toString());



Вот здесь не могу напистаь метод умножения
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
package matrix;

import java.util.Random;
import java.util.Scanner;
import java.io.InputStreamReader;

public class MatrixUtils {

    public static void fillByRandom(Matrix m) {
        int rowCount = m.getRowCount();
        int colCount = m.getColCount();
        Random random = new Random();

        for (int i = 1; i <= rowCount; i++) {

            for (int j = 1; j <= colCount; j++) {
                try {
                    m.put(i, j, random.nextInt(50));
                } catch (MatrixIndexException e) {
                    System.err.println(e.getMessage());

                }

            }
        }
    }

    public static void fillByNumber(Matrix m, int number) {
        int rowCount = m.getRowCount();
        int colCount = m.getColCount();

        for (int i = 1; i <= colCount; i++) {

            for (int j = 1; j <= rowCount; j++) {
                try {
                    m.put(i, j, number);

                } catch (MatrixIndexException e) {
                    System.err.println(e.getMessage());

                }

            }
        }

    }

    public static Matrix fillByKeyboard() {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter The Number Of Matrix Rows:");
        int rowCount = scan.nextInt();
        System.out.println("Enter The Number Of Matrix Columns:");
        int colCount = scan.nextInt();
        try {
            Matrix m = new Matrix(rowCount, colCount);
            System.out.println("Enter Matrix Data:");
            for (int i = 1; i <= rowCount; i++) {
                for (int j = 1; j <= colCount; j++) {
                    int value = scan.nextInt();
                     m.put(i, j, value);
                }
            }
            return m;

        } catch (MatrixIndexException ex) {
            System.err.println(ex.getMessage());

        }
        return null;

    }
    
    public static Matrix MatrixMultiple(Matrix a, Matrix b){
       
   


    }
}



Чтобы было понятно) есть класс матрикс там через toString мы выводим

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
package matrix;

public class Matrix {
    
 
    private int rowCount;
    private int colCount;
    private int[][] data;

    

    Matrix(int row, int col) throws MatrixIndexException {
        if (row <= 0 || col <= 0) {
            throw new MatrixIndexException("Недопустимый размер матрицы.");
        }
        this.rowCount = row;
        this.colCount = col;
        data = new int[row][col];
    }

    Matrix(Matrix matrix) {

        this.rowCount = matrix.getRowCount();
        this.colCount = matrix.getColCount();
        data = new int[rowCount][colCount];

        for (int i = 1; i < rowCount; i++) { 
            for (int j = 1; j < colCount; j++) {
                data[i][j] = matrix.data[i][j];
            }
        }
    }

   

    public int get(int i, int j) throws MatrixIndexException {
        if (i < 1 || i > rowCount) {  
            throw new MatrixIndexException("Недопустимое число строк: " + i);
        }
        if (j < 1 || j > colCount) {
            throw new MatrixIndexException("Недопустимое число столбцов: " + j);
        }
        
        return data [i-1][j-1];
    }

    void put(int i, int j, int value) throws MatrixIndexException {
        if (i < 1 || i > rowCount) {
            throw new MatrixIndexException("Недопустимое число строк: " + i);
        }
        if (j < 1 || j > colCount) {
            throw new MatrixIndexException("Недопустимое число столбцов: " + j);
        }
        data[i-1][j-1] = value;


    }

    public int getRowCount() {
        return rowCount;
    }

    public int getColCount() {
        return colCount;
    }

    @Override
    public boolean equals(Object obj) {
        Matrix m = (Matrix) obj;

        if (m.getRowCount() != rowCount || m.getColCount() != colCount) {
            return false;
        }

        for (int i = 0; i < rowCount; i++) {
            for (int j = 0; j < colCount; j++) {
                if (data[i][j] != m.data[i][j]) {
                    return false;
                }
            }
        }

        return true;
    }

    @Override
    public String toString() {
        StringBuilder out = new StringBuilder();
        out.append("Matrix:\n[ ");
        for (int i = 0; i < rowCount; i++) {
            if (i != 0) {
                out.append("\n");
                out.append("  ");
            }
            for (int j = 0; j < colCount; j++) {
                out.append(data[i][j]);
                if (j == colCount - 1) {
                    continue;
                }
                for (int k = 0; k < getMaxLength() - getIntLength(data[i][j]) + 2; k++) {
                    out.append(" ");
                }
            }
        }
        out.append("  ]");
        return out.toString();
    }

    private int getMaxLength() {
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < rowCount; i++) {
            for (int j = 0; j < colCount; j++) {
                int k = data[i][j];
                if (k > max) {
                    max = k;
                }
            }
        }
        return getIntLength(max);
    }

    private int getIntLength(int i) {
        return String.valueOf(i).length();
    }

}
...
Рейтинг: 0 / 0
04.08.2018, 21:51
    #39683356
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна ваша помощь по JAVA
Код: java
1.
public class Main extends Exception



Непрапвильно. Расширять Exception должен свой класс, обрабатывающий исключения (если такой понадобится), а не перемножающий матрицы.

Код: java
1.
 System.out.println(m.toString());



Надо освить использование логгера.

nastyaaПомогите буду благодарна вам

Я и без благодарности помогу. Вот, делаю поиск в google по словам
java matrix library

и нахожу
Efficient Java Matrix Library (EJML)

Не надо плохо программировать то, что уже запрограммировано хорошо.
...
Рейтинг: 0 / 0
04.08.2018, 22:22
    #39683360
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна ваша помощь по JAVA
Мне просто нужно до утра сдать, можете смотрятся мой код доделать. Я уже все перепробовала, пожалуйста выручите меня
...
Рейтинг: 0 / 0
05.08.2018, 05:34
    #39683390
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна ваша помощь по JAVA
nastyaa,

Нашёл пример умножения матриц:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
To answer your question, I suggest that you use a debugger to step through your code to find out what it is doing. Also I suggest using double rather than Double. – Code-Apprentice Jul 12 '13 at 21:04 
@LouisWasserman Thank you so much. In retrospect, that was so obvious. I'm dumb. Thank you. – user2577854 Jul 12 '13 at 21:05
@MonadNewb Thank you very much, I will keep that in mind. – user2577854 Jul 12 '13 at 21:07
add a comment | show 4 more comments
6 Answers
order by  
up vote
24
down vote
You can try this code:

public class MyMatrix {
    Double[][] A = { { 4.00, 3.00 }, { 2.00, 1.00 } };
    Double[][] B = { { -0.500, 1.500 }, { 1.000, -2.0000 } };

    public static Double[][] multiplicar(Double[][] A, Double[][] B) {

        int aRows = A.length;
        int aColumns = A[0].length;
        int bRows = B.length;
        int bColumns = B[0].length;

        if (aColumns != bRows) {
            throw new IllegalArgumentException("A:Rows: " + aColumns + " did not match B:Columns " + bRows + ".");
        }

        Double[][] C = new Double[aRows][bColumns];
        for (int i = 0; i < aRows; i++) {
            for (int j = 0; j < bColumns; j++) {
                C[i][j] = 0.00000;
            }
        }

        for (int i = 0; i < aRows; i++) { // aRow
            for (int j = 0; j < bColumns; j++) { // bColumn
                for (int k = 0; k < aColumns; k++) { // aColumn
                    C[i][j] += A[i][k] * B[k][j];
                }
            }
        }

        return C;
    }

    public static void main(String[] args) {

        MyMatrix matrix = new MyMatrix();
        Double[][] result = multiplicar(matrix.A, matrix.B);

        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 2; j++)
                System.out.print(result[i][j] + " ");
            System.out.println();
        }
    }
}



https://stackoverflow.com/questions/17623876/matrix-multiplication-using-arrays

С уважением, Валентин
...
Рейтинг: 0 / 0
05.08.2018, 19:13
    #39683488
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна ваша помощь по JAVA
Valentin Kolesnikov,

Спасибо вам, но мне нужно как на моем примере)
public static Matrix MatrixMultiple(Matrix a, Matrix b){
и вывести через main как на моем примере)
...
Рейтинг: 0 / 0
05.08.2018, 19:51
    #39683491
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна ваша помощь по JAVA
nastyaaValentin Kolesnikov,

Спасибо вам, но мне нужно как на моем примере)
public static Matrix MatrixMultiple(Matrix a, Matrix b){
и вывести через main как на моем примере)

Вот рашение для Вашего примера.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
package matrix;

import java.util.Random;
import java.util.Scanner;
import java.io.InputStreamReader;

public class MatrixUtils {

    public static void fillByRandom(Matrix m) {
        int rowCount = m.getRowCount();
        int colCount = m.getColCount();
        Random random = new Random();

        for (int i = 1; i <= rowCount; i++) {

            for (int j = 1; j <= colCount; j++) {
                try {
                    m.put(i, j, random.nextInt(50));
                } catch (MatrixIndexException e) {
                    System.err.println(e.getMessage());

                }

            }
        }
    }

    public static void fillByNumber(Matrix m, int number) {
        int rowCount = m.getRowCount();
        int colCount = m.getColCount();

        for (int i = 1; i <= colCount; i++) {

            for (int j = 1; j <= rowCount; j++) {
                try {
                    m.put(i, j, number);

                } catch (MatrixIndexException e) {
                    System.err.println(e.getMessage());

                }

            }
        }

    }

    public static Matrix fillByKeyboard() {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter The Number Of Matrix Rows:");
        int rowCount = scan.nextInt();
        System.out.println("Enter The Number Of Matrix Columns:");
        int colCount = scan.nextInt();
        try {
            Matrix m = new Matrix(rowCount, colCount);
            System.out.println("Enter Matrix Data:");
            for (int i = 1; i <= rowCount; i++) {
                for (int j = 1; j <= colCount; j++) {
                    int value = scan.nextInt();
                     m.put(i, j, value);
                }
            }
            return m;

        } catch (MatrixIndexException ex) {
            System.err.println(ex.getMessage());

        }
        return null;

    }
    
    public static Matrix MatrixMultiple(Matrix a, Matrix b) throws MatrixIndexException {
       
        int aRows = a.getRowCount();
        int aColumns = a.getColCount();
        int bRows = b.getRowCount();
        int bColumns = b.getColCount();

        if (aColumns != bRows) {
            throw new IllegalArgumentException("A:Rows: " + aColumns + " did not match B:Columns " + bRows + ".");
        }

        Matrix c = new Matrix(aRows, bColumns);
        for (int i = 0; i < aRows; i++) {
            for (int j = 0; j < bColumns; j++) {
                c.put(i+1,j+1,0);
            }
        }

        for (int i = 0; i < aRows; i++) { // aRow
            for (int j = 0; j < bColumns; j++) { // bColumn
                for (int k = 0; k < aColumns; k++) { // aColumn
                    c.put(i+1,j+1,c.get(i+1,j+1) + a.get(i+1, k+1) * b.get(k+1, j+1));
                }
            }
        }

        return c;   
    }
}



Результат запуска:
авторMatrix:
[ 925 1536 2564
1091 1407 2265
1760 2079 3359 ]


С уважением, Валентин
...
Рейтинг: 0 / 0
05.08.2018, 19:52
    #39683492
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна ваша помощь по JAVA
Спасибо вам большое)))очень вам благодарен))
...
Рейтинг: 0 / 0
05.08.2018, 20:14
    #39683496
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна ваша помощь по JAVA
nastyaaСпасибо вам большое)))очень вам благодарен))

Рад что смог Вам помочь.

С уважением, Валентин
...
Рейтинг: 0 / 0
05.08.2018, 22:18
    #39683507
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна ваша помощь по JAVA
nastyaaСпасибо вам большое)))очень вам благодарен))
Спалился)))
...
Рейтинг: 0 / 0
06.08.2018, 09:32
    #39683576
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна ваша помощь по JAVA
...
Рейтинг: 0 / 0
07.08.2018, 00:21
    #39684007
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочно нужна ваша помощь по JAVA
Тихо... может это двойной трап?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Срочно нужна ваша помощь по JAVA / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]