我目前有以下代码:

    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


但是,当您只想检查它们是否在数组中时,有更好的方法。创建具有变量Pairx的对象y,创建equals()hashCode()函数以使每对具有唯一性(例如,从hashCode获取string xy),将所有输入置于Set和然后检查给定的Pair(x,y)是否在Set中。

关于java - 检查数组是否包含特定元素的紧凑方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36938607/

10-11 04:14
查看更多