这个问题在这里已经有答案了:
java—打印2d数组的最佳方法(13个答案)
上个月关门了。
我试图通过将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
有人能帮我吗?
非常感谢您的回答和评论。
1条答案
按热度按时间kmynzznz1#
“grid”被声明为一个2d数组,它在java中不是原语。因此,当您试图打印它时,它仍然打印出内存地址/引用。
试着用数组替换它。改为deeptostring(grid)。