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

Java 读取文件并将数据存储到多个阵列时出错,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我试图做的是读取一个文件并将数据存储到一个数组中。它根据文件中每行上的数字量选择的数组。我一直在为索引出界。我做错了什么?我的代码是否正确 我正在读的文件是这样的 >2.0 5.0 3.5 > >5.2 0.5 4.8 > >1.0 > >2.5 我希望有3个数字的行存储在盒子数组中,有1个数字的行存储在球数组中。但是,我希望能够将任意数量的行存储到数组中,而不仅仅是这4行 这是到目前为止我的代码 import java.io.*; public

我试图做的是读取一个文件并将数据存储到一个数组中。它根据文件中每行上的数字量选择的数组。我一直在为索引出界。我做错了什么?我的代码是否正确

我正在读的文件是这样的

>2.0 5.0 3.5
>
>5.2 0.5 4.8
>
>1.0
>
>2.5
我希望有3个数字的行存储在盒子数组中,有1个数字的行存储在球数组中。但是,我希望能够将任意数量的行存储到数组中,而不仅仅是这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++;
                }
            }
        }
    }
}
import java.io.*;
公共类MainProg{
公共静态void main(字符串[]args)引发IOException{
FileReader fr=新的FileReader(“info.txt”);
BufferedReader br=新的BufferedReader(fr);
字符串nums;
整数计数=0;
int lineNo=0;
而((nums=br.readLine())!=null){
字符串编号[]=nums.split(“”);
双人[][]球=新双人[lineNo][];
如果(number.length==3){
for(int i=0;i

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

您的代码有几个逻辑问题

lineNo
i
的值为零时,以下几行是什么意思?(试着思考)

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

for(int i = 0; i < numbers.length; i++){
     ...
     lineNo++;
     ...
}
为什么在使用
BufferedReader br
循环时阅读此
?这些没有意义

其他问题是,

  • 您的输入是否包含输入示例中提供的空行
  • 您想在ball and box数组中存储值,但不知道输入文件中有多少行?那么,如何在不知道大小的情况下创建阵列呢?我建议你用它来完成你的任务
例如,您可以执行以下操作

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]

一个附带问题:
p
可以用硬编码的
0
替换。是的,
p
偶尔会增加到
1
,但该值在超出范围之前从未被读取。此外,您的输入文件是否真的包含这些
字符,或者它们是否试图采用块引号格式?在相关注释中,为什么
尤其是
盒子
会被一次又一次地扔掉和重新创建?它们看起来确实像是用来储存东西的。我相信,OP没有正确地理解他在做什么!谢谢,你的回答真的很有帮助。
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]