读取文件并将数据存储到多个阵列时出错

时间:2017-02-20 03:54:31

标签: java arrays multidimensional-array

我要做的是读取文件并将数据存储到数组中。它选择的数组取决于文件中每行的数字量。我一直想出索引的界限。我做错了什么,我的代码是否符合我的目的?

对于我正在阅读的文件,它就是这样的。

>2.0 5.0 3.5
>
>5.2 0.5 4.8
>
>1.0
>
>2.5

我希望有3个数字的行存储在box数组中,并且有1个数字的行存储在ball数组中。但是,我希望能够将任意数量的行存储到数组中,而不仅仅是这4行。

到目前为止,这是我的代码。

import java.io.*;

public class MainProg{
    public static void main(String[] args) throws IOException{
        FileReader fr = new FileReader("info.txt");
        BufferedReader br = new BufferedReader(fr);
        String nums;
        int count =0;
        int lineNo = 0;


        while((nums = br.readLine()) != null){      
            String numbers[] = nums.split(" ");
            double[][] ball = new double[lineNo][];
            if(numbers.length == 3){
                for(int i = 0; i < numbers.length; i++){
                    double[][] box = new double[lineNo][i];
                    box[lineNo][i] = Double.parseDouble(numbers[lineNo]);

                    lineNo++;

                    System.out.println(box[i] + " ");
                }
            }else{
                while(numbers.length == 1 && ((nums = br.readLine()) != null)){
                    int p = 0;
                    ball[count][p] = Double.parseDouble(numbers[count]); 
                    p++;
                    count++;
                }
            }
        }
    }
}

我应该在一个对象数组中执行此操作,但我想先弄清楚如何以这种方式执行此操作。

1 个答案:

答案 0 :(得分:1)

您的代码有几个逻辑问题。

lineNoi的值为零时,以下行是什么意思? (试着想)

double[][] ball = new double[lineNo][];
double[][] box = new double[lineNo][i];

为什么要在lineNo循环中增加变量for而不是while循环?

for(int i = 0; i < numbers.length; i++){
     ...
     lineNo++;
     ...
}

为什么while块内有else循环?

while(numbers.length == 1 && ((nums = br.readLine()) != null)){
    int p = 0;
    ball[count][p] = Double.parseDouble(numbers[count]); 
    p++;
    count++;
}

为什么要使用while在此BufferedReader br循环中阅读?这些没有意义。

其他问题是,

  • 您的输入是否包含输入示例中提供的空行?
  • 您想要将值存储在球和盒子阵列中,但您不知道输入文件中有多少行?那么如何在不知道尺寸的情况下创建数组呢?我建议您使用ArrayList来完成任务。

例如,您可以执行以下操作。

BufferedReader br = new BufferedReader(new FileReader("info.txt"));
ArrayList<Double> ball = new ArrayList<>();
ArrayList<Double[]> box = new ArrayList<>();

String nums;
while((nums = br.readLine()) != null){      
    String numbers[] = nums.split(" ");
    if(numbers.length == 3){
        Double[] box_row = new Double[numbers.length];
        for(int i = 0; i < numbers.length; i++){
            box_row[i] = Double.parseDouble(numbers[i]);
        }
        box.add(box_row);
    }else if(numbers.length == 1){
        ball.add(Double.parseDouble(numbers[0]));
    }
}

System.out.println("Box Array");
for(Double[] element: box){
    System.out.println(Arrays.toString(element));
}
System.out.println("Ball Array");
System.out.println(ball.toString());

我假设您的输入文件不包含空行且没有>个字符。上面的代码片段输出以下内容。

Box Array
[2.0, 5.0, 3.5]
[5.2, 0.5, 4.8]
Ball Array
[1.0, 2.5]