我目前有以下代码:
int[][] legalForBlack = {{0,1},{1,0},{2,3},{3,2}};
for (int x=0;x<boardSize;x++) {
for (int y=0;y<boardSize;y++) {
if (x,y) in legalForBlack
methodA()
else
methodB()
}
}
当然,这些代码不会编译。我正在寻找一种新颖,紧凑的方法来检查(x,y)在给定列表中的时间。
我可以使用4个if语句或循环来执行此操作,但这不是imo的正确方法。
我正在寻找能够在恒定时间内做到这一点的东西。
编辑:
我想我找到了办法。你觉得这怎么样?
int[][] legalForBlack = {{0,1},{1,0},{2,3},{3,2}}; // keep in order!
int cur = 0;
for (int x=0;x<boardSize;x++) {
for (int y=0;y<boardSize;y++) {
int[] buffer = legalForBlack[cur];
if (x==buffer[0] && y==buffer[1]) {
cur++;
methodA();
} else {
methodB();
}
}
}
最佳答案
这里是数组的伪代码:
input data in array
find x with for to match first column (legalForBlack[i][0])
if x matches legalForBlack[i][0] check if legalForBlack[i][1] matches y
if yes, count it
但是,当您只想检查它们是否在数组中时,有更好的方法。创建具有变量
Pair
和x
的对象y
,创建equals()
和hashCode()
函数以使每对具有唯一性(例如,从hashCode
获取string xy
),将所有输入置于Set
和然后检查给定的Pair(x,y)
是否在Set
中。关于java - 检查数组是否包含特定元素的紧凑方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36938607/