Search code examples
javaarraysmatrixmatrix-multiplication

How to read two matrices from a txt file in java


So, I've been given a .txt file that contains two 3x3 matrices and need to carry those matrices to add, multiply, subtract and do a scalar multiplication, where the program would take only one matrix and the user would input a number for the operation.
The problem is getting the program to read only the matrices.
Here is the .txt file I've been given, where the first two numbers are the size:


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


Any life saver out there?


EDIT1

This is what i have so far, the multiply method was working whe I was letting the user input the matrix but now is just giving some odd answer, what am I missing?

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 + " ");
        }
    }
}


Solution

  • You have to:

    • read first line

    • split it to get dimensions

    • read next lines (regards dimensions)

    • read special char (@)

    • repeat

    Reading first array you have there:

    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));
    
    
    }
    

    and base on input:

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

    output should be:

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