【问题标题】:Printing ArrayList to an output file [duplicate]将ArrayList打印到输出文件[重复]
【发布时间】:2020-11-20 02:42:53
【问题描述】:

我正在尝试通过将 PriorityQueue 的内容转换为 ArrayList 来将其打印到输出文件。

(注意:我没有打印到控制台!)

除了我声明了一个 toString 方法,我仍然得到这样的输出:I@7c3df479

将队列转换为ArrayList:

private PriorityQueue<GameState> unexpanded = new PriorityQueue<>(Comparator.comparing(GameState::getF_n));

...

public ArrayList<GameState> getUnexpanded()
    {
        ArrayList<GameState> unExpanded = new ArrayList<>(unexpanded);
        return unExpanded;
    }

获取 ArrayList 并尝试打印:

private void printSolution() throws IOException
    {
        FileWriter outFile = new FileWriter("output.txt");
        PrintWriter output = new PrintWriter(outFile);
        ArrayList<GameState> unexpanded = game.getUnexpanded();

        for (int i = 0; i < unexpanded.size(); i++)
        {
            output.printf(unexpanded.get(i).toString() + "\n");
        }

        output.close();
    }

toString 方法:

public class GameState
{
private int[][] grid;

...

@Override
    public String toString()
    {
        return "{" + grid + "}";
    }
}

一切正常,但程序打印的内容如下:I@7c3df479

有人可以帮我解决这个问题吗?

非常感谢您提前提供的答案和cmets。

【问题讨论】:

  • 我的问题已结束,说明这个问题已经有了答案,但链接的问题没有我的问题的答案。我请求重新提出我的问题。
  • 解决方法相同:使用Arrays.deepToString(...)创建二维数组的字符串表示。您需要在 toString() 中使用它而不是将其输出打印到控制台这一事实不会改变基本解决方案:使用 Arrays.deepToString()
  • 我也试过了,但没用。您还有其他解决方案吗?

标签: java arraylist tostring priority-queue printwriter


【解决方案1】:

'grid' 被声明为 2D 数组,它不是 java 中的原始数组。因此,当您尝试打印它时,它仍然会打印出内存地址/引用。

尝试用 Arrays.deepToString(grid) 替换它。

【讨论】:

  • 我也试过了,但没用。您还有其他解决方案吗?
  • 你能提供更多关于它为什么不工作的信息吗?你得到的输出到底是什么?
  • 我不知道为什么它不起作用这就是我问的原因。输出是内存地址,就像我在问题中所说的那样。