我正在画一个国际象棋骑士的可能路径,一种情况是这样的:
if (boundsOK(x + 1, y + 2)) {
temp = boardArray[x + 1][y + 2];
if (isLegalMove(x, y, x + 1, y + 2) != MoveType.NONE) {
moves.add(x);
moves.add(y);
moves.add(x + 1);
moves.add(y + 2);
move(x + 1, y + 2, x, y);
}
boardArray[x + 1][y + 2] = temp;
}
现在,而不是1和2,我想构造一个循环来尝试组合:
1 2
-1 2
1 -2
-1 -2
2 1
-2 1
2 -1
-2 -1
但是我不知道如果没有必要怎么做。至少有一种聪明的方法吗?
您可以创建一个Vector类或类似的类(或使用任何类似Pair的类型),用您的值填充列表并对其进行迭代(无需过多考虑性能):
var moves = List.of(
new Move(1,2),
new Move(-1,2),
new Move(1,-2),
new Move(-1,-2),
new Move(2,1),
new Move(-2,1),
new Move(2,-1),
new Move(-2,-1));
for (var move : moves) {
var x = move.getX();
var y = move.getY();
testMove(x, y) … // or refactor your method to receive a Move instance directly
}
如果您确实想节省一些行(您是在打高尔夫球吗?),则可以使用循环创建实例,但这并不能真正使代码更好(从可读性,性能,要输入的字符数):
var moves = new ArrayList<Move>();
for (int x : List.of(1,-1)) {
for (int y : List.of(2,-2)) {
moves.add(new Move(x,y));
}
}
for (int x : List.of(2,-2)) {
for (int y : List.of(1,-1)) {
moves.add(new Move(x,y));
}
}
再想一想,如果我们注意到移动总是必须包含数字1和2且从不存在(±1,±1)或(±2)的事实,那么它可能可以浓缩为2个循环和1个条件循环。 ,±2):
var moves = new ArrayList<Move>(8);
var offsets = List.of(-2,-1,1,2);
for (int x : offsets) {
for (int y : offsets) {
if (Math.abs(x) != Math.abs(y)) {
moves.add(new Move(x,y));
}
}
}
但是,我仍然认为走KISS(保持简单,愚蠢)路线并简单地写下所有可能的动作是有利的。目的很明显,行数相同(并且您不必想出巧妙的方法来“计算”移动)。
问题内容: 目前,我试图让所有可能的组合从的,是每一个元素只包含一个字母。 在本身包含相同字母两次甚至更多,他们只应该,因为他们经常会出现使用。 在稍后应该含有最多的给定的长度从最小的2个字母的所有组合。 我在此处搜索了stackoverflow,但只发现了忽略以下事实的置换函数:每个字母仅在出现时才经常使用。 这是我的第一个Swift 2项目,所以请原谅我的绿色态度:) 我想要的是 我目前的做法
我正在组装一个java小程序,使任务在工作中更快、更高效。 用户定义项目列表需要拆分成的三个组的大小。列表中的每个项目根据它被放入三个组中的哪个组具有不同的值。小程序需要显示哪个组合的总价值最高。 示例:带有列的二维整数数组;项目编号、第1组中的值、第2组中的值和第3组中的值。 这样,用户定义组1有3个插槽,组2有3个插槽,组3有2个插槽。 小程序应不按特定顺序显示以下解决方案 我可以管理一种效率
我试图在一个形状为(n,10)的数组中创建所有可能的0和1的组合。例如,如果我们假设一个像这样的任意组合:np.array([0,0,1,1,0,0,1,1,0,0]),我如何生成所有可能的组合(这将产生2^10=1024数组)?
问题内容: 给定表: 名称对于所有人而言都是唯一的 哪种SQL查询可以生成所有可能的n!/(((n-2)!2!)循环组合? 假定Person的基数始终等于4 示例人物= {‘Anna’,’Jerome’,’Patrick’,’Michael’) 输出: 任何帮助,将不胜感激。谢谢! 这是我的答案(我使用了oracle SQL): 问题答案:
假设我有一个数据集: 我使用: 屈服: 我想使用这三行创建不同的组合,为每个组合形成一个数据集。 组合的示例如下: 另一个是: 第三种可能的组合如下: 最后: PS:在前面的示例中,每个组合(一个数据集)至少有两行, 如何在JAVA中实现这一点?非常感谢。