Java 如何使用CSVReader?

Java 如何使用CSVReader?,java,csv,inputstream,fileinputstream,Java,Csv,Inputstream,Fileinputstream,我试图用CSVReader读取记事本中的文件,但无法正常工作。它显示ArrayIndexOutOfBoundsException:2行“y[i][2]”。我目前还不熟悉使用Java和CSVReader public static void main(String[] args) throws IOException { double[][] x = new double[100][3]; double[][] y = new double[100][1]; Strin

我试图用
CSVReader
读取记事本中的文件,但无法正常工作。它显示
ArrayIndexOutOfBoundsException:2行“y[i][2]”
。我目前还不熟悉使用Java和CSVReader

public static void main(String[] args) throws IOException {

    double[][] x = new double[100][3];
    double[][] y = new double[100][1];

    String line[];
    try{
        CSVReader br=new CSVReader(new FileReader("ex2data2.txt"),',');
        int i = 0;
        while((line=br.readNext())!=null){
            x[i][0] = Double.parseDouble(line[0]);
            x[i][1] = Double.parseDouble(line[1]);
            y[i][2] = Double.parseDouble(line[2]);
            i++;
        }
        br.close();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
你必须创造

double[][] y = new double[100][1];
i、 e.100行1列。但尝试将值放在位置
y[i][2]
。这就是为什么你会在BoundsException中获得ArrayIndexOutOfBoundsException。创造像

double[][] y = new double[100][3];
或者您可以简单地将值设置为(在这种情况下,您不需要创建如上所述的2D数组)


现在还不清楚为什么在从文件中读取数据后会按原样存储数据,但是

double[][] y = new double[100][1];
这将分配一个包含100个
double
数组的数组,每个数组的长度1

在这里:

您试图在这100个数组之一的第三个元素中存储某些内容。它们没有那么大;您创建它们的长度为1

我猜你是想:

 y[i][0] = Double.parseDouble(line[2]);
因为您存储在
y
数组中的唯一内容就是这个值


尽管如此,这是一种糟糕的存储这些值的方法。通常,使用动态数据结构可以更好地为您服务,这样您就不必担心文件的长度(行数)。此外,为什么需要两个不同的二维阵列?例如,即使是
列表
,也会更好

嗯,你的
y
2d数组只允许第二级数组中的一个元素,你正试图在第三级数组中存储一些东西。你不需要像CVSReader这样复杂的东西来读取简单的文本文件。。。在尝试更高级的东西之前,您还应该学习Java另外,我的ESP告诉我OP要做的是将值存储在
y[i][0]
中,因为我稍后会将其存储在我的矩阵对象“矩阵Ax=新矩阵(x),其中x必须是二维数组(JAMA lib)”中动态数据结构如何工作?我不知道如何使用列表
 y[i][2] = Double.parseDouble(line[2]);
 y[i][0] = Double.parseDouble(line[2]);