我试图使用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();
}发布于 2014-01-07 05:38:21
在从文件中读取数据之后,您为什么要存储数据,这一点完全不清楚,但是.
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数组中的唯一东西是这个单个值。
尽管如此,这是存储这些价值观的一个糟糕的方法。通常,使用动态数据结构可以为您提供更好的服务,因此不必担心文件的长度(行数)。另外,为什么需要两个不同的2D数组?例如,即使是一个List<Double[]>,也会更好。
发布于 2014-01-07 05:23:40
你创造了
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]);https://stackoverflow.com/questions/20964466
复制相似问题