我有一个包含浮点方形表的文件。该文件是一个示例,因此行和列的数量可能会在其他文件中更改以供读取。
我遇到了一个越界异常,无法弄清问题是什么。
while ((line=bufferedReader.readLine())!=null){
String[] allIds = line.split(tabSplit);
String[] allFloats = new String[allIds.length-2];
//i do "length-2" because the first two columns in the table are not numbers and are
supposed to be ignored.
System.arraycopy(allIds, 2, allFloats, 0, allIds.length-2);
int rows = rowsNumber;
int cols = colsNumber;
//i have "rows" and "cols" values already extracted from the file and they return the
correct integers.
double [][]twoD = new double[rows][cols];
int rowCount = 0;
for (int i = 0; i<rows; i++) {
twoD[rowCount][i] = Double.parseDouble(allFloats[i]);
}
rowCount++;
}
}
我的表看起来像这样,但有更多的行和列:
#18204 name01 2.67 2.79 2.87 2.7
#12480 name02 4.01 3.64 4.06 4.24
#21408 name03 3.4 3.55 3.34 3.58
#a2u47 name04 7.4 7.52 7.62 7.23
#38590 name05 7.63 7.29 8 7.72
当我打印allFloats
时,它会正确返回单独数组中的每一行。我不明白为什么在尝试创建2D数组时出现错误。
答案 0 :(得分:2)
编辑: 请尝试以下方法:
int rowCount = 0;
int rows = rowsNumber;
int cols = colsNumber;
double[][] twoD = new double[rows][cols];
while ( ( line=bufferedReader.readLine() ) != null )
{
String[] allIds = line.split( tabSplit );
String[] allFloats = new String[allIds.length-2];
System.arraycopy(allIds, 2, allFloats, 0, allIds.length-2);
for (int i = 0; i<cols; i++)
{
twoD[rowCount][i] = Double.parseDouble(allFloats[i]);
}
rowCount++
}
答案 1 :(得分:0)
您正在每行创建二维双数组。我建议首先生成一个二维数组,其中包含每个行的所有浮点值,然后迭代该数组,然后从中解析一个double。