Нужна помощь с ArrayList

374
10 июня 2017, 13:50

Вообщем проблема такая: мне нужно из текстового файла сделать ArrayList из массивов int[], я разбиваю каждую строку, и в цикле добавляю массивы в лист, но, с каждым добавлением, последующие массивы меняются на тот что добавляю. В итоге получается Лист из нескольких копий последнего массива.

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
public class FileReader {
public ArrayList<int[]> list = new ArrayList<>();
private int i;
int[] array = new int[4];
public FileReader(File file) {
}
public ArrayList<int[]> getArrListByFile(File file){
    String num = new String();
    int number;
    int index = 0;


    try {
        BufferedReader in = new BufferedReader(new java.io.FileReader(file.getPath()));
        String str;
        while ((str = in.readLine())!= null){
            i = 0;
            while (str.contains(" ")){
                index = str.indexOf(' ');
                num = str.substring(0,index);
                str = str.substring(index+1);
                number = Integer.parseInt(num);
                array[i] = number;
                i++;
            }
            number = Integer.parseInt(str);
            array[i] = number;
            list.add(array);
        }
        in.close();
    }catch (IOException e){
        System.out.println(e);
    }

    return list;
}

}

Answer 1

Добавьте перед внутренним циклом (после i = 0 например) строку array = new int[4].

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

READ ALSO
Как пробежаться по вложенным Map?

Как пробежаться по вложенным Map?

Есть map вида Map<BigInteger, Map<BigInteger, Object>> В реальности иерархия гораздо сложнееКак пробежаться по всем маппам и везде, где встречено нужное...

415
Как сделать скриншот dialogfragment

Как сделать скриншот dialogfragment

Публикую в вк результат игрыЕсли публиковать как сообщение , то результат можно редактировать в вк

338