0

我正在尝试从以逗号分隔的文件中读取 x,y 坐标。但是,元素未正确添加到 ArrayList。我在哪里错了?

ArrayList<Double> xpointArrayList = new ArrayList<Double>();
ArrayList<Double> ypointArrayList = new ArrayList<Double>();
try {
    BufferedReader input = new BufferedReader(new FileReader(args[0]));
    String line;
    while ((line = input.readLine()) != null) {
        line = input.readLine();
        String[] splitLine = line.split(",");

        double xValue = Double.parseDouble(splitLine[0]);
        double yValue = Double.parseDouble(splitLine[1]);

        xpointArrayList.add(xValue);
        ypointArrayList.add(yValue);
    }
    input.close();

    } catch (IOException e) {

    } catch (NullPointerException npe) {

    }

    double[] xpoints = new double[xpointArrayList.size()];
    for (int i = 0; i < xpoints.length; i++) {
        xpoints[i] = xpointArrayList.get(i);
    }
    double[] ypoints = new double[ypointArrayList.size()];
    for (int i = 0; i < ypoints.length; i++) {
        ypoints[i] = ypointArrayList.get(i);
    }

当我对 xpoints 和 ypoints 数组执行 Array.toSring 调用时。它只有一个数字。例如在文件中:

1,2
3,4
0,5

xpoints 数组只有 3.0,ypoints 数组只有 4.0。它哪里出错了?

4

3 回答 3

6
while ((line = input.readLine()) != null) {
    line = input.readLine();

您只需阅读一行,将其丢弃,然后再阅读另一行。

冲洗,重复(因为它是一个循环)。

将来,您真的应该考虑使用调试器。您可以在代码执行时单步执行代码,并准确查看发生了什么。学习使用它将是无价的。

编辑添加:正如 GregHaskins 指出下面的评论,您还通过捕捉NullPointerException而不采取行动来掩盖问题。在循环的第二次迭代中,linenull在第二次调用时,readLine()因为文件中没有任何内容。调用split()then 会抛出一个NullPointerException你捕获的...然后默默地忽略。

于 2012-12-06T05:07:30.533 回答
1

您还可以使用 Scanner 类读取输入。以下是使用 Scanner 和 File 类读取文件的代码的修改版本:

ArrayList<Double> xpointArrayList = new ArrayList<Double>();
ArrayList<Double> ypointArrayList = new ArrayList<Double>();
try {
    Scanner input = new Scanner(new File("testing.txt"));
    String line;
    while (input.hasNextLine()) {
        line = input.nextLine();
        String[] splitLine = line.split(",");

        double xValue = Double.parseDouble(splitLine[0]);
        double yValue = Double.parseDouble(splitLine[1]);

        xpointArrayList.add(xValue);
        ypointArrayList.add(yValue);
    }
    input.close();

    } catch (IOException e) {

    } catch (NullPointerException npe) {

    }

    double[] xpoints = new double[xpointArrayList.size()];
    for (int i = 0; i < xpoints.length; i++) {
        xpoints[i] = xpointArrayList.get(i);
    }
    double[] ypoints = new double[ypointArrayList.size()];
    for (int i = 0; i < ypoints.length; i++) {
        ypoints[i] = ypointArrayList.get(i);
    }
于 2012-12-06T05:13:46.987 回答
1

你的阅读方式不对。您正在调用 readLine() 两次。一个在顶部,另一个在进入 while() 循环之后。这样你就不会处理所有的点。一些点坐标被忽略。你应该使用。

while ((line = input.readLine()) != null) {

//line = input.readLine(); */Remove this */

*/your code */

}
于 2012-12-06T05:13:53.000 回答