gpt4 book ai didi

java - ArrayList 仅给出嵌套循环之外的最后一个元素

转载 作者:行者123 更新时间:2023-12-01 06:04:58 24 4
gpt4 key购买 nike

我正在读取一个包含 4 列和 150 个数据的 csv 文件。首先,我将每一行读入字符串数组并将其转换为整数数组。然后我将其转换为数组列表。如果我尝试在 while 循环之外显示我的数组列表,它只会显示最后的数组条目。完成 while 循环后,我想要 arraylist 中的所有值并将其传递给另一个函数。我怎样才能实现这个目标?

    import java.io.BufferedReader;
import java.io.FileReader;
import java.util.*;


public class ReadInputCSV {
public static void main(String[] args) throws Exception {
List<Integer> intList = new ArrayList<Integer>();

BufferedReader CSVFile = new BufferedReader(new FileReader("C:/Users/sana/Desktop/DATASET/shuttle.csv"));

String dataRow = CSVFile.readLine();
while (dataRow != null){
String[] dataArray = dataRow.split(",");
int[] intsArray=new int[dataArray.length];
for(int i=0;i<dataArray.length;i++)
{
intsArray[i]=Integer.parseInt(dataArray[i]);
}

intList = new ArrayList<Integer>(intsArray.length);

for (int i=0; i<intsArray.length; i++)
{
intList.add(intsArray[i]);
}

dataRow = CSVFile.readLine();

}
CSVFile.close();
}

}

最佳答案

在 while 循环的每次迭代中,您都会得到:

intList = new ArrayList<Integer>(intsArray.length);

在这条指令之后,您将在 intList 中添加数据。因此,您只能看到来自最后一次迭代的数据是正常的,因为 ArrayList 的新实例在每次迭代时都会与您的 intList 变量相关联。

您还可以组合:

String dataRow = CSVFile.readLine(); 
while (dataRow != null){

//...

dataRow = CSVFile.readLine();

转换为更紧凑的以下形式:

String dataRow = null;
while ((dataRow = CSVFile.readLine()) != null) {
// Your loop instructions here
}

应用这些更改,您的代码将变为:

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.*;


public class ReadInputCSV {
public static void main(String[] args) throws Exception {
List<Integer> intList = new ArrayList<Integer>();

BufferedReader CSVFile = new BufferedReader(new FileReader("C:/Users/sana/Desktop/DATASET/shuttle.csv"));

String dataRow = null;
while ((dataRow = CSVFile.readLine()) != null){
String[] dataArray = dataRow.split(",");
int[] intsArray=new int[dataArray.length];
for(int i=0;i<dataArray.length;i++)
{
intsArray[i]=Integer.parseInt(dataArray[i]);
}

// No more instanciation of the intList here

for (int i=0; i<intsArray.length; i++)
{
intList.add(intsArray[i]);
}

// No more CSVFile.readLine() here
}
CSVFile.close();
}
}

这应该为您提供 ArrayList 中的所有数据,但无法知道哪些数据来自哪一行。如果这对您来说不是问题并且这应该对您有用。

关于java - ArrayList 仅给出嵌套循环之外的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47028410/

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