Java读取文件并写入数组

时间:2015-12-08 18:29:31

标签: java file parsing multidimensional-array

---------------已解决!!! ----------------------- 我想感谢大家的帮助!

我必须读取一个文件,其中我有nxm元素,然后将这些元素放入2D数组中,然后将其打印出来。我有点卡在打印我的阵列。在file.txt中我有2x2 => 2行和2列,元素是:1 2 3 4.

这是我的代码:

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

我的输出,它是怎么回事:

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       

我希望如何:

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

有谁知道我怎么能解决这个问题呢?

EDIT !! 如果我改变这样的代码

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

我得到了这个输出:

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

3 个答案:

答案 0 :(得分:2)

你做了n * n次循环。因为每次读取文件都进入循环。如果您知道每一行都是一个数字,那么您只能读一次并打印每一行。

尝试一下,让我知道会发生什么。

墨西哥的问候

答案 1 :(得分:1)

此行System.out.print("Elements in matrix are: \n");之后 粘贴此代码。

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

不要使用while循环。

答案 2 :(得分:1)

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

    }
}