gpt4 book ai didi

java - 有没有办法快速查找数组中的所有位置是否都是 "full"?

转载 作者:行者123 更新时间:2023-12-02 08:45:16 28 4
gpt4 key购买 nike

如果我有一个 64 长度的 java 数组 i[],除了循环整个数组之外,是否有一种快速方法可以找出该数组中的每个位置是否“已满”?我正在编写一个黑白棋 AI,我需要知道整个数组是否已满。

最佳答案

保留一个 long 类型的标志变量(64 位),并通过适当设置或清除相关位来使用它来跟踪哪些数组条目已“满”。 (您需要使其与数组条目保持同步。)

如果您对每个位使用 1 值来表示相关单元格已满,则可以通过将标志变量与 -1L 进行比较来快速判断整个数组是否已满.

实现示例

int[] grid = new int[64];
long full = 0L;

// place a piece at a certain grid position
grid[17] = 1; // pretend 1 is the code for black
full |= 1L << 17; // set bit 17 in our "full" tracker

// is the grid full?
if (full == -1L)
// yes it is!
else
// no it isn't
<小时/>

您可以更狡猾,并使用标志变量来跟踪每个单元格的颜色,这样您就可以完全避免使用数组。一个变量跟踪给定的单元格是否被占用,另一个变量跟踪颜色(0 表示白色,1 表示黑色)。

long colour = 0L;
long full = 0L;

// set position 17 to white
colour &= ~(1L << 17); // clear the bit (white)
full |= (1L << 17); // set it to occupied

// set position 42 to black
colour |= (1L << 42); // set the bit (black)
full |= (1L << 42); // set it to occupied

// is position 25 occupied?
if ((full & (1L<<25)) != 0) {
// yes, but what colour?
if ((colour & (1L<<25)) != 0)
// black
else
// white
}

// is the grid full?
if (full == -1L)
// yes it is!
else
// no it isn't

关于java - 有没有办法快速查找数组中的所有位置是否都是 "full"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10225287/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com