【问题标题】:How to use CSVReader?如何使用 CSVReader?
【发布时间】:2014-01-24 17:06:24
【问题描述】:

我正在尝试使用CSVReader 在记事本中读取我的文件,但我无法让它工作。它说 ArrayIndexOutOfBoundsException: 2 line "y[i][2]". 尽管我将数组行初始化为 100。我目前是使用 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();
    }

【问题讨论】:

  • 嗯,你的y二维数组只允许二级数组中的一个元素,而你试图在第三级存储一些东西。
  • 你不需要像 CVSReader 那样复杂的东西来读取一个简单的文本文件......你还应该在尝试进入更高级的东西之前学习 Java。

标签: java csv inputstream fileinputstream


【解决方案1】:

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

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

这分配了一个由 100 个 double 数组组成的数组,每个数组的长度为 1

这里:

 y[i][2] = Double.parseDouble(line[2]);

您试图在这 100 个数组之一的 第三个 元素中存储一些东西。它们没有那么大。您将它们创建为长度为 one

我怀疑你的意思是:

 y[i][0] = Double.parseDouble(line[2]);

因为您在y 数组中存储的唯一内容就是该单个值。

话虽如此,这是存储这些值的一种糟糕方式。一般来说,使用动态数据结构会更好地为您服务,因此您不必担心文件的长度(行数)是多少。此外,为什么需要两个不同的二维数组?例如,即使是List<Double[]> 也会更好。

【讨论】:

  • 因为我稍后会将它存储在我的矩阵对象中“Matrix Ax = new matrix(x) where x must be a 2dimensional array (JAMA lib)”动态数据结构如何工作?我不知道如何使用 List
【解决方案2】:

你已经创建了

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

即100 行和 1 列。但试图将价值放在y[i][2] 的位置。这就是你得到 ArrayIndexOutOfBoundsException 的原因。创建喜欢

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

或者你可以简单地将值设置为(在这种情况下你不需要创建上面给出的二维数组)

y[i][0] = Double.parseDouble(line[2]);

【讨论】:

  • 你有一个错误;)另外,我的 ESP 告诉我,OP 的意思 要做的是将值存储在y[i][0]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
  • 2015-10-05
相关资源
最近更新 更多