![](/img/trans.png)
[英]Java - If condition to check if an Integer array-list contains element which is greater than particular value
[英]Compact manner to check if array contains particular element
我目前有以下代码:
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
但是,当您只想检查它们是否在数组中时,有更好的方法。 创建具有变量x
和y
对象Pair
,创建equals()
和hashCode()
函数以使每个对具有唯一性(例如从string xy
获取hashCode
),将所有输入放入Set
,然后检查给定的Pair(x,y)
是否为在Set
。
boolean isLegal = false;
for(int[] coord: legalForBlack)
if(Arrays.equals(coord, someXYArray)) {
isLegal = true;
break; //Credit to Adnan Isajbegovic
}
if(isLegal)
methodA();
else
methodB();
对于您的问题,我有替代的解决方案。 从您的代码来看,我假设您正在编写与国际象棋有关的东西,而legalForBlack列表是允许玩家移动的一系列坐标。 IMO的最佳方法是在板上用索引(0到最大值63)编码每个正方形,并将所有这些正方形存储在<Integer,Coordinate>类型的Map中,其中Coordinate具有int x和int y。 如果坐标没有任何特殊用途,还可以跳过地图并将其转换为简单的允许正方形数组。 这仅需要您检查给定值是否在允许的平方列表中。 我希望这可以为您解决问题提供更好的方法。 祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.