我正在尝试使用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();
}
答案 0 :(得分:0)
您已创建
double[][] y = new double[100][1];
即。 100行1列。但试图将价值放在y[i][2]
位置。这就是为什么你得到ArrayIndexOutOfBoundsException。创建像
double[][] y = new double[100][3];
或者您可以简单地将值设为(在这种情况下,您不需要像上面那样创建2D数组)
y[i][0] = Double.parseDouble(line[2]);
答案 1 :(得分:0)
完全不清楚为什么你会在从文件中读取数据之后存储数据,但是......
double[][] y = new double[100][1];
这会分配一个包含100个double
数组的数组,每个数组的长度为 1
下面:
y[i][2] = Double.parseDouble(line[2]);
您尝试将某些内容存储在这100个阵列之一的第三元素中。它们不是那么大;你创建它们的长度为一个。
我怀疑你打算这样做:
y[i][0] = Double.parseDouble(line[2]);
因为您在y
数组中存储的唯一内容就是单个值。
所有这一切,这是存储这些价值的不好方法。通常,使用动态数据结构可以更好地服务,因此您不必担心文件的长度(行数)。另外,为什么需要两个不同的2D阵列?例如,即使是List<Double[]>
也会更好。