Загрузка данных из файла в векторную структуру - PullRequest
6 голосов
/ 29 мая 2010

Я пытаюсь проанализировать отформатированный файл фиксированной ширины, извлекая из него значения точек x, y и затем сохраняя их в массиве int[] внутри вектора. Текстовый файл выглядит следующим образом:

0006 0015
0125 0047
0250 0131

Это код:

    Vector<int[]> vc = new Vector<int[]>();

    try {
        BufferedReader file = new BufferedReader(new FileReader("myfile.txt"));
        String s;
        int[] vec = new int[2];

        while ((s = file.readLine()) != null) {
            vec[0] = Integer.parseInt(s.substring(0, 4).trim());
            vec[1] = Integer.parseInt(s.substring(5, 8).trim());
            vc.add(vec);
        }
        file.close();
    } catch (IOException e) {
    }

    for(int i=0; i<vc.size(); i++){
        for(int j=0; j<2; j++){
            System.out.println(vc.elementAt(i)[j]);
        }
    }

Но вывод показывает только последнюю строку.

250  
131  
250  
131  
250  
131

Должен ли я каким-то образом использовать Vector.nextElement() здесь, чтобы получить все мои данные?

Ответы [ 2 ]

3 голосов
/ 29 мая 2010

Вам нужно создать новый int [] на каждом проходе цикла

    while ((s = file.readLine()) != null) {
        int[] vec = new int[2];
        vec[0] = Integer.parseInt(s.substring(0, 4).trim());
        vec[1] = Integer.parseInt(s.substring(5, 8).trim());
        vc.add(vec);
    }

В противном случае у вас просто есть несколько ссылок на один и тот же массив, который вы перезаписываете на каждом проходе.

1 голос
/ 29 мая 2010

Вы в основном добавляете один и тот же массив три раза к Vector при обновлении его значения (поэтому у вас есть последнее значение в файле).

В конце у вас будет 3 ссылки в Vector, которые указывают на одну и ту же переменную, вам нужно создавать новую на каждой итерации, а не только в начале. Это потому, что vec не дублируется при добавлении его в вектор, просто передается его ссылка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...