在Arraylist中添加一行

时间:2015-09-07 21:16:50

标签: java arraylist

在方法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()每次呼叫只添加一行),输出完全没有变化。 例如,如果我这样做

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|
   +---+---+---+---+---+

请问smb请告诉我我做错了什么?提前谢谢!

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;
      }

1 个答案:

答案 0 :(得分: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);
        }
    }

希望这一切都可以帮到你。