Как читать две матрицы из TXT-файла в Java - PullRequest
0 голосов
/ 11 марта 2019

Итак, я получил файл .txt, который содержит две матрицы 3х3 и должен содержать эти матрицы для сложения, умножения, вычитания и скалярного умножения, где программа будет принимать только одну матрицу, а пользователь будет вводитьномер для операции.
Проблема в том, что программа читает только матрицы.
Вот файл .txt, который мне дали, где первые два числа имеют размер:


3 3
12 34 45
34 -12 56
76 12 -1
@
3 3
8 13 45
67 0 12
12 -12 3


Есть ли какой-нибудь спасатель?


EDIT1

Это то, что у меня такДо сих пор метод умножения работал, когда я позволял пользователю вводить матрицу, но сейчас просто даю какой-то странный ответ, что мне не хватает?

import java.io.*;

public class ReadingTest {
    public static void main(String[] args) throws IOException {
        BufferedReader reader;
        reader = new BufferedReader(new FileReader("matrix2.txt"));

        String firstDimension = reader.readLine();
        String[] split = firstDimension.split(" ");
        int firstX = Integer.parseInt(split[0]);
        int firstY = Integer.parseInt(split[0]);

        int[][] first = new int[firstX][firstY];

        for (int i = 0; i < firstX; i++) {
            String[] line;
            line = reader.readLine().split(" ");

            for (int j = 0; j < firstY; j++) {
                first[i][j] = Integer.parseInt(line[j]);
            }

        }

        // Read "@"
        reader.readLine();

        String secondDimension = reader.readLine();
        String[] split2 = secondDimension.split("");
        int secX = Integer.parseInt(split2[0]);
        int secY = Integer.parseInt(split2[0]);

        int[][] second = new int[secX][secY];

        for (int i = 0; i < secX; i++) {
            String[] line;
            line = reader.readLine().split(" ");

            for (int j = 0; j < secY; j++) {
                second[i][j] = Integer.parseInt(line[j]);
            }

        }

        // System.out.println(Arrays.deepToString(second));

        multiply(first, second);

        reader.close();
    }

    public static void multiply(int[][] first, int[][] second) {
        for (int i = 0; i < first.length; i++) {
            int total = 0;
            for (int j = 0; j < second[0].length; j++) {
                int fnum = first[i][j];
                int snum = second[j][i];
                int product = fnum * snum;
                total += product;
            }
            System.out.print(total + " ");
        }
    }
}

1 Ответ

0 голосов
/ 11 марта 2019

Вы должны:

  • читать первую строку

  • разделите его, чтобы получить размеры

  • читать следующие строки (в отношении размеров)

  • читать специальный символ (@)

  • повтор

Чтение первого имеющегося у вас массива:

static void readFile() throws IOException {
    BufferedReader reader;
    reader = new BufferedReader(new FileReader("file.txt"));

    String firstDimension = reader.readLine();
    String[] split = firstDimension.split(" ");
    int firstX = Integer.parseInt(split[0]);
    int firstY = Integer.parseInt(split[0]);

    int[][] first = new int[firstX][firstY];

    for (int i = 0; i < firstX; i++) {
        String[] line = reader.readLine().split(" ");

        for (int j = 0; j < firstY; j++) {
            first[i][j] = Integer.parseInt(line[j]);
        }

    }

    // Read "@"
    reader.readLine();

    System.out.println(Arrays.deepToString(first));


}

и база на входе:

3 3
12 34 45
34 -12 56
76 12 -1
@
3 3
8 13 45
67 0 12
12 -12 3

вывод должен быть:

[[12, 34, 45], [34, -12, 56], [76, 12, -1]]
...