我想要展示tic tac toe board。这样的事情:
XXX
XXX
XXX
是否有可能为每个人实现这一目标? 我试着做一些:
Map<Integer, Tile> board = generateBoard();
for (Map.Entry<Integer, Tile> entry: board.entrySet()){
System.out.print(entry.getValue().getSign());
}
board.forEach((k,v) -> {
int i = 1;
if(i % 3 == 0){
System.out.println();
}
System.out.print(v.getSign());
i++;
});
但我的输出不正确。你能给我任何输出来实现这个输出吗?
答案 0 :(得分:1)
一个明显的问题是i
没有递增,因为你在每次迭代时都重新定义它。不幸的是,labmdas和有状态变量混合不好。我建议改为使用常规for
循环:
int i = 0;
for (Tile tile : board.values()) {
System.out.print(tile.getSign());
if (++i % 3 == 0) {
System.out.println();
}
}
答案 1 :(得分:0)
两件事:
删除i并用k替换它,看看是否有帮助。
答案 2 :(得分:0)
lambda外部lambda中引用的变量必须是Effectively Final或final。这可以防止您轻松增加计数器,记住您所处的位置。
假设地图中的整数键是插槽号,您可以执行此操作。
board.forEach((k,v) -> {
System.out.print(v.getSign());
if(k % 3 == 0){
System.out.println();
}
});