【问题标题】:printing an array of arrays java打印数组数组java
【发布时间】:2016-03-27 20:42:35
【问题描述】:

首先道歉,如果这真的很容易解决,我还在学习。 我有一个数组 String[][] 的 ArrayList,我正在尝试将它们全部打印出来。 当我使用下面的代码时,它只会多次打印同一块板,而不是列表中的每个板,我看不出哪里出错了。

除非它每次都覆盖?

for (int i = 0; i < Player.getBoardsAll().size(); i++) {
    TextIO.putln();
    TextIO.put("   ");

    for (char a = 'A'; a < 'A' + Board.getColumns(); a++) {
        TextIO.put(a, 4);
    }

    TextIO.putln();
    TextIO.putln();

    for (int r = 0; r < Board.getRows(); r++) {
        TextIO.putf("%-3d", r+1);

        for (int c = 0; c < Board.getColumns(); c++) {
            TextIO.put(Player.getBoardsAll(i)[r][c], 4);
        }

        TextIO.putln();
        TextIO.putln();
    }
}

这就是上面的调用和设置:

private static ArrayList<String[][]> boardsAll = new ArrayList<String[][]>();

public static void setBoardsAll(String[][] input) {
    boardsAll.add(input);
}

public static String[][] getBoardsAll(int location) {
    return Player.boardsAll.get(location);
}

public static ArrayList<String[][]> getBoardsAll() {
    return boardsAll;
}

【问题讨论】:

  • 我怀疑您没有正确加载列表。你试过调试器吗?
  • 你忘记在你的外循环上加一个右括号。
  • @BurakTutanlar 在编辑中添加了右括号。也许您的原始代码中也存在此错误,但我猜在这种情况下您会遇到编译器错误。
  • 您是否尝试过使用 TextIO 填充您的数组?
  • 刚刚添加了我的 getter 和 setter,当我运行完整代码时,它向 ArrayList 添加了 String[][] 的次数是正确的,但每次只打印最后一个。

标签: java arrays


【解决方案1】:

如果它总是打印相同的板,那么可能你将同一个板多次插入到 ArrayList 中。例如,您是否做过类似的事情:

String[][] board = new String[x][y];
// you inserted some data into board
setBoardsAll(board); // you added the board
// you cleared and/or re-inserted new data to
// the same board without creating another 2D array.
setBoardsAll(board);

如果您这样做,您将拥有一个 ArrayList,其中包含同一个二维数组的多个指针。如果这是问题所在,您必须为每个板创建另一个数组。假设您创建了第一个板并将其添加到 ArrayList。然后,如果您编辑第一个板,则 ArrayList 中的第一项也将被编辑,因为它们都指向同一个数组。

【讨论】:

  • 这是有道理的,我认为这就是发生的事情。我想如果我使用boardsAll.add() 它会将该状态写入其数组。那么保存每个数组状态的最佳方法是什么?我不想创建很多单独的数组?
  • 看来你必须这样做。你有很多单独的板子吗?您是否代表具有 2D 阵列的板?如果行和列是恒定的,那么二维数组是好的。如果您需要大量单独的二维数组,则需要创建大量单独的数组。
  • 谢谢,我想我大概知道我现在需要做什么了。
  • 我正在为骑士巡回赛问题编写代码。我想要做的是在游戏结束时打印出所有棋盘状态,因此试图在每次移动后将当前棋盘状态添加到数组列表中,然后在最后打印数组数组以显示给玩家.
  • 也许你可以只保存移动而不是整个棋盘。喜欢差异。
猜你喜欢
  • 1970-01-01
  • 2015-11-17
  • 2015-06-20
  • 2014-05-18
  • 2016-01-23
  • 2013-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多