我正在尝试用 java 编写一个小型战斗游戏。
100%学术,我用它来练习递归,所以...我想用它而不是迭代,即使它在大多数时更简单,更有效打击>某些情况。
让我们开始做生意。这些是规则:
设置这些规则后,我使用以下数组进行测试:
int[][] board = new int[][]
{
{0, 1, 2, 0, 1, 0},
{0, 0, 1, 1, 1, 0},
{0, 3, 0, 0, 0, 0},
{0, 0, 2, 1, 2, 0},
{0, 0, 0, 1, 1, 1},
};
到目前为止它工作得很好,为了使它更加用户友好,我想添加一些报告。这些是我需要的方法:
我需要掌握这些报告,我想得到一些想法。
记住必须使用递归来完成,我想了解这一点,唯一的方法就是练习!
非常感谢你的时间和耐心:)。
答案 0 :(得分:0)
除非您指定船只必须用0
分隔,否则这是不可能的。否则,1,1
可以是长度为2的船舶,或两艘长度为1的船舶。
鉴于这种限制,你的两份报告都可以/应该作为一个单一的过程完成,将地图变成船只清单。
我不太喜欢写出递归包装器(我假设您知道如何使用递归函数对数组进行“迭代”),所以我正在跳过该部分。
使用非硬编码的单个函数可能会或者可能不会更好,但这似乎有点困难,并且只有三个选项,硬编码不是太多的代码开销(因为所有三个做得有所不同)。
或者,你可以使用一个完全独立的方法,你可以在地图上迭代计算船只的“上升边缘”。这是一个重量轻得多的解决方案,但是无法为您提供与结果数据相关的灵活性。
...通过更轻的重量,我的意思是“可以使用正则表达式完成”
答案 1 :(得分:0)
嗯,这看起来比这里的人看起来更简单。
我可以看到递归的方式可以用来考虑整个矩阵中的船舶数量,即第一行中的船舶数量加上其余部分的船舶数量基质
如果你能解决这个问题,那就准备好了。
如何吗
考虑你的基本情况,停止递归调用的条件是什么?
解决连续统计船舶的方式。
如果有,请返回行中的船只数量以及矩阵其余部分的船只。
我相信你方法的签名是这样的......
ShipCount(int[][] matrix, int numberOfRows, int numberOfCellsPerRow)
假设计数器变量称为“计数”。你会有类似的东西:
//Signature
{
int count = 0;
if(/*Base condition*/){
}else{
/*Count the ships, work with the "count" variable.*/
}
return count + ShipCount(matrix[][], numberOfRows - 1, numberOfCellsPerRow) /*"numberOfRows - 1" takes you to the next row.*/
}
祝好运#2:)