2015-09-07 6 views
0

В методе addRow() Мне нужно добавить строку в конец 2D-массива. Например, если я создаю объект:Добавление строки в Arraylist

Board<String> board = new Board<String>(1,4,0,4,"A"); //(int minRow, int maxRow, int minCol, int maxCol, T e) 
System.out.println(board); 

выхода является:

| 0| 1| 2| 3| 4| 
    +---+---+---+---+---+ 
1 | A| A| A| A| A| 
    +---+---+---+---+---+ 
2 | A| A| A| A| A| 
    +---+---+---+---+---+ 
3 | A| A| A| A| A| 
    +---+---+---+---+---+ 
4 | A| A| A| A| A| 
    +---+---+---+---+---+ 

Но когда я называю board.addRow() (addRow() добавляет только 1 строку при каждом вызове) вывод не меняется на все , Например, если я

board.addRow(); 
board.addRow(); 

вывод должен выглядеть следующим образом:

 | 0| 1| 2| 3| 4| 
     +---+---+---+---+---+ 
    1 | A| A| A| A| A| 
     +---+---+---+---+---+ 
    2 | A| A| A| A| A| 
     +---+---+---+---+---+ 
    3 | A| A| A| A| A| 
     +---+---+---+---+---+ 
    4 | A| A| A| A| A| 
     +---+---+---+---+---+ 
    5 | A| A| A| A| A| 
     +---+---+---+---+---+ 
    6 | A| A| A| A| A| 
     +---+---+---+---+---+ 

, но вместо этого он просто производит мой предыдущий вывод:

| 0| 1| 2| 3| 4| 
    +---+---+---+---+---+ 
1 | A| A| A| A| A| 
    +---+---+---+---+---+ 
2 | A| A| A| A| A| 
    +---+---+---+---+---+ 
3 | A| A| A| A| A| 
    +---+---+---+---+---+ 
4 | A| A| A| A| A| 
    +---+---+---+---+---+ 

Может кому-л скажите, пожалуйста, что я делаю неправильно? заранее спасибо!

public Board(int minRow, int maxRow, int minCol, int maxCol, T fillElem){ 
     this.minRow = minRow; 
     this.maxRow = maxRow; 
     this.minCol = minCol; 
     this.maxCol = maxCol; 

     if(fillElem == null){ 
      throw new RuntimeException("Cannot set elements to null"); 
     } 
     else{ 
      this.element = fillElem; 
     } 
+0

plz copy добавить() методы также –

+1

@RamanShrivastava, что вы подразумеваете под копией add() ?? –

+0

хочу видеть код метода добавления() класса Board –

ответ

0

Проблема заключается в следующем: сейчас новая строка вы добавляете не имеет элементов, вы добавляете пустую строку, так что вы не имеете никакого отношения к печати, поэтому вы продолжаете видеть один и тот же вывод, я повторно некоторые вашего кода при создании доски для добавления элементов в новую строку.

public void addRowBottom(){ 
     int origRow = maxRow - minRow; 
     int col = maxCol - minCol; 

     ArrayList<T> rowLine = new ArrayList<T>(); 
     myBoard.add(origRow + 1, rowLine); 

     for(int j = 0; j <= col; j++){ 
      rowLine.add(j, this.element); 
     } 
    } 

Это решить текущие проблемы, но то, что вам нужно внешний вид, что вы не обновляя MAXROW значения после добавления новой строки, так что теперь вы вставляете новую строку всегда в том же положении , и эта позиция не является нижней (в первый раз это дно, но для остальных это не так, поскольку число maxRow не обновлено), результат после исправления, который я показал, будет выглядеть так же, одинаковые значения всегда вставлены. Если вы хотите по-настоящему добавить строку в нижнюю часть, то это то, что вы должны сделать:

public void addRowBottom(){ 
     int origRow = maxRow - minRow; 
     int col = maxCol - minCol; 

     ArrayList<T> rowLine = new ArrayList<T>(); 

     maxRow = maxRow + 1; //here you are updating the maxNumber of rows 
     myBoard.add(origRow + 1, rowLine); 

     for(int j = 0; j <= col; j++){ 
      rowLine.add(j, this.element); 
     } 
    } 

Надеюсь, что все это может вам помочь.

+0

Спасибо большое! @JavierMoreno –

+0

Рад, что это помогло! –

Смежные вопросы