gpt4 book ai didi

java - 读取文件并将数据存储到多个数组时出错

转载 作者:行者123 更新时间:2023-11-30 06:53:15 25 4
gpt4 key购买 nike

我想做的是读取文件并将数据存储到数组中。它根据文件中每行的数字数量选择数组。我不断提出索引越界的问题。我做错了什么,我的代码对于我想要做的事情是否正确?

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

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

我应该在对象数组中执行此操作,但我想首先弄清楚如何执行此操作。

最佳答案

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

lineNoi的值为零时,下面几行是什么意思? (尝试思考)

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

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

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

为什么else block 中有一个while循环?

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

为什么要使用 BufferedReader br 在这个 while 循环中进行读取?这些没有意义。

其他问题是,

  • 您的输入是否包含输入示例中提供的空行?
  • 您想要将值存储在 ball 和 box 数组中,但您不知道输入文件中有多少行?那么如何在不知道大小的情况下创建数组呢?我宁愿建议你使用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]

关于java - 读取文件并将数据存储到多个数组时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42336210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com