我尝试从文本文件中读取数据并将数据添加到元素为 7 数字数组的数组列表中。但是arraylist的所有元素总是变成最后一次读取的值,这意味着最后读取的数据会替换list中的所有元素。 我想原因可能是必须在静态的 main 方法中调用该函数。如何才能成功添加数据?
package main;
import java.util.Locale;
import java.util.Scanner;
import javax.swing.JFileChooser;
import java.util.ArrayList;
import java.io.*;
public class readFile {
public static void main(String args[]){
read();
}
public void read()throws Exception{
Scanner input = new Scanner(new File("./src/sample.txt"));
input.useLocale(Locale.US);
double[] temp = new double[7];
ArrayList<double[]> pointList= new ArrayList<double[]>();
while(input.hasNext()){
for (int i=0;i<=6;i++)
{
temp[i]=input.nextDouble();
}
pointList.add(temp);
}
}
}
文本文件中的数据如图底部所示,而每个元素的结果都是相同的。
最佳答案
将 temp
的声明移至 while 循环内:
ArrayList<double[]> pointList= new ArrayList<double[]>();
while(input.hasNext()){
double[] temp = new double[7];
for (int i=0;i<7;i++) // Don't make it more confusing by using "6" here.
{
temp[i]=input.nextDouble();
}
pointList.add(temp);
}
否则,您只是重复地将相同的数组添加到列表中,这意味着您正在覆盖元素。
将项目添加到列表中并不会复制它:它只是将对该项目的引用添加到列表中。因此,对该项目的后续更改将反射(reflect)在列表中的项目中。
关于java - 如何在静态 main 方法中将数据添加到数组列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35476381/