java - 如何在静态 main 方法中将数据添加到数组列表中

标签 java arraylist static

我尝试从文本文件中读取数据并将数据添加到元素为 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);
        }
    }
}

文本文件中的数据如图底部所示,而每个元素的结果都是相同的。

enter image description here

最佳答案

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/

相关文章:

Java按值传递和递归

c# - 静态方法线程安全

java - 使用 Service、AsyncTask 和 Thread 制作智能 Android Media Player 应用

Swift 中等效的 Java 接口(interface)

java - 需要有关基本 Java 程序编译错误的帮助

java - 通过扫描仪输入链表

java - 从对象 arrayList 为 JButton 赋值

java - 使用 TreeMap<Integer, ArrayList<Station>> 中的值更新 ArrayList<Station>

c# - 使用静态变量来存储全局的、不断变化的信息是一种好习惯吗?

c++ - 在类或结构中调用静态函数的好习惯