简体   繁体   中英

Java read file and write into array

--------------- SOLVED !!! ----------------------- I would like to thank you, everyone, for your help !

I have to read a file where I have nxm elements, and then put those elements into 2D array, and then print it out. I'm a little bit stuck at printing my array out. In file.txt I have 2x2 => 2 lines and 2 columns, and elements are:1 2 3 4.

Here is my code:

public class ex_1 
{
    public static void main(String args[])
    {   
        FileReader fr = new FileReader("FirstMatrix.txt");
        BufferedReader br = new BufferedReader(fr);
        String s = br.readLine();
        String[] split = s.split("x");
         int k=Integer.parseInt(split[0]);
         int l=Integer.parseInt(split[1]);
        System.out.println("Matrix dimensions: "+k+" lines,  "+l+" columns si "+k*l+" elements");

        System.out.print("Elements in matrix are: \n"); 

        int[][] FirstMatrix = new int [k][l];
                while ((s = br.readLine()) != null) 
                {       
                    for(int i=0; i<FirstMatrix.length; i++)
                        for(int j=0; j<FirstMatrix[i].length;j++)
                        {
                            FirstMatrix[i][j] = Integer.parseInt(s);
                            System.out.println("FirstMatrix["+i+"]["+j+"]="+FirstMatrix[i][j]);
                        }   
                }
                br.close();

My output, how it is:

FirstMatrix[0][0]=1   
FirstMatrix[0][1]=1    
FirstMatrix[1][0]=1    
FirstMatrix[1][1]=1    
FirstMatrix[0][0]=2    
FirstMatrix[0][1]=2    
FirstMatrix[1][0]=2    
FirstMatrix[1][1]=2    
FirstMatrix[0][0]=3    
FirstMatrix[0][1]=3    
FirstMatrix[1][0]=3    
FirstMatrix[1][1]=3    
FirstMatrix[0][0]=4    
FirstMatrix[0][1]=4    
FirstMatrix[1][0]=4    
FirstMatrix[1][1]=4       

How I want it to be:

FirstMatrix[0][0]=1   
FirstMatrix[0][1]=2    
FirstMatrix[1][0]=3    
FirstMatrix[1][1]=4           

Does anyone know how I can fix this print out please?

EDIT!! If I change code like this

    int[][] FirstMatrix = new int [k][l];

                while ((s = br.readLine()) != null) 
                {       
                    for(int i=0; i<k;i++)
                        for(int j=0; j<l; j++)
                        {
                        FirstMatrix[i][j] = Integer.parseInt(s);
                        }
                }
                br.close();

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

I get this output:

FirstMatrix[0][0]=4
FirstMatrix[0][1]=4
FirstMatrix[1][0]=4
FirstMatrix[1][1]=4

You're doing n*n times the loop. Because everytime that you read the file are entering the loop. If you know that every line is a number, you could read only one time and print each row.

Try it and let me know what happen.

Best regards from Mexico

After this line System.out.print("Elements in matrix are: \\n"); paste this code.

int[][] FirstMatrix = new int [l][k];

        for(int j=0; j<l;j++)
        {  
            for(int i=0; i<k; i++) {
                s = br.readLine());
                FirstMatrix[j][i] = Integer.parseInt(s);
                System.out.println("FirstMatrix["+j+"]["+i+"]="+FirstMatrix[j][i]);
            }
        }

Don't use while loop.

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class ex_1 {
    public static void main(String args[]) throws IOException {
        FileReader fr = new FileReader("FirstMatrix.txt");
        BufferedReader br = new BufferedReader(fr);
        String s = br.readLine();
        String[] split = s.split("x");
        int k = Integer.parseInt(split[0]);
        int l = Integer.parseInt(split[1]);
        System.out.println("Matrix dimensions: " + k + " lines,  " + l + " columns si " + k * l + " elements");

        System.out.print("Elements in matrix are: \n");

        int[][] FirstMatrix = new int[k][l];

        for (int lineIndex = 0; lineIndex < k; lineIndex++) {


                for (int columnIndex = 0; columnIndex < l; columnIndex++) {
                    s = br.readLine();
                    FirstMatrix[lineIndex][columnIndex] = Integer.valueOf(s);
                }

        }

        for (int a = 0; a < k; a++) {
            for (int b = 0; b < l; b++)
                System.out.print(FirstMatrix[a][b] + " ");
            System.out.println();
        }

        br.close();

    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM