Java делает 2D список объектов из файла чисел - PullRequest
0 голосов
/ 25 июня 2019

У меня есть пирамида чисел в файле, как

  • 1
  • 2 3
    • 3 4 5

Я пытаюсь заполнить 2D Arraylist числами из файла. Я пытаюсь заполнить сначала строку чисел, а затем добавить эту строку в столбец, но я не могу найти правильный входной тест, чтобы это сделать.

ArrayList<Integer> rows = new ArrayList<Integer>(); 
ArrayList<ArrayList<Integer>> columns = new ArrayList<ArrayList<Integer>>(); 
    try {
        Scanner s = new Scanner(new File("1.txt"));
        //while (s.hasNext()) {
            String a = s.next();
            String b = s.next();
            s.nextLine();

            while(s.hasNextLine()) {
                while(s.hasNextInt() ) { 
                // I want to say while( has more lines is true )
                // ( create a row of ints and append it to columns
                    rows.add(s.nextInt());

                    }   
                columns.add(rows);
                rows.clear();
            }   

    catch (FileNotFoundException e) {
        e.printStackTrace();
    }

edit: моя последняя добавляемая строка - [1, 2, 3, 3, 4, 5] вместо [3, 4, 5], потому что s.hasNextInt () всегда имеет значение true во время итерации, поэтому while (in.hasNextLine ()) запускается только один раз

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Скорее, я скажу, что эта строка является вашей проблемой: rows.clear();

Ваша переменная rows по-прежнему указывает на тот же список, на который она указывала до того, как вы добавили его вcolumns поэтому, если вы очистите его, то все, что вы сделали, это добавили пустую ArrayList к columns.

Замените эту строку:

rows.clear();

этим:

rows = new ArrayList<>();

Таким образом, переменная rows по-прежнему указывает на пустой, совершенно новый ArrayList, но ArrayList, на который она указывала ранее, остается один.

0 голосов
/ 25 июня 2019

Простой способ сделать это - заменить цикл hasNextLine() на nextLine() и разбиение строки.

Таким образом, вы бы заменили цикл на nextLine()

ArrayList<Integer> row;
ArrayList<ArrayList<Integer>> columns = new ArrayList<ArrayList<Integer>>(); 
try {
    Scanner s = new Scanner(new File("1.txt"));
    while (s.hasNextLine()) {
        String[] temp = s.nextLine().split(" ");
        row = new ArrayList<Integer>();
        for(String i : temp) ints.add(Integer.parseInt(i));
        columns.add(row);
    }
}
catch (FileNotFoundException e) {
    e.printStackTrace();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...