java - 迭代对象列表并验证属性 (int) 是否相互跟随(例如 : (1, 2,3,4)、(3,4,5,6),但不是 (1,2,5) 或 (3,4,5 ,7))

标签 java list attributes int compare

我正在用 Java 开发一款棋盘游戏,我想验证字母放置在棋盘上时是否彼此“接触”。

我正在使用List<Letter> 。放置字母时,我会验证其是否垂直或水平对齐(使用字母的 (x,y) 位置)。我还定制了 2 个 Comparators对于我的Letter类,之后我可以对 List<Letter> 进行排序在 x 或 y 位置下方(取决于单词是垂直对齐还是水平对齐)。

现在为了验证字母是否彼此“接触”,我必须验证 x(或 y,取决于它的对齐方式)是否类似于: 1,2,3,4而不是1,2,3,5例如(这意味着字母 3 和 4 之间有一个“空格”)。

我必须迭代我的 List<Letter>但我不确切知道我必须在 foreach 内进行哪个测试。我必须比较 x第一个对象的 x下一个对象的位置,它必须是 x 的位置 +1。

我希望它很清楚,这里是我的代码和所涉及的类的一些片段,以便您可以理解一些结构。英语不是我的第一语言,所以请随时询问您是否需要任何精确性。预先感谢您的帮助!

由于我在 stackoverflow 上发布的内容不多,因此我尽力对消息中的文本进行格式化,希望你们能够阅读!

public class Letter {
int x,y;

public int getX() {
//...
}
public int getY() {
//...
}

public static Comparator<Letter> COMPARE_BY_X = (Letter a, Letter b) -> {
// ...
}

public static Comparator<Letter> COMPARE_BY_Y = (Letter a, Letter b) -> {
// ...
}

public int hashCode() {
//...
}
public boolean equals() {
//...
}

}


public class VerifyWord(List<Letter> word) {

private List<Letter> word;
//...


// list is sorted
for (Letter t : word) {
// what should I put there????
}


//...

}

最佳答案

不要使用 foreach 循环,因为这样您一次只能访问其中一个 Letter 元素。迭代索引并检查下一个元素的 x 坐标是否比当前元素的 x 坐标大 1。例如:

for (int i = 0; i < word.size() - 1; i++) {
    if (word.get(i+1).getX() != (word.get(i).getX() + 1)) {
        // error
    }
}

关于java - 迭代对象列表并验证属性 (int) 是否相互跟随(例如 : (1, 2,3,4)、(3,4,5,6),但不是 (1,2,5) 或 (3,4,5 ,7)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36375894/

相关文章:

java - 使用正则表达式检查 java 中的字符串是否有效

java - 在本地主机上运行的 HTTPS Web 服务调用在测试环境中失败,异常为 : javax.net.ssl.SSLException: SSLSocketFactory is null

java - Android AsyncTask 从 URL 读取数据返回 android.os.NetworkOnMainThreadException

java - 单元测试 Java 代码 - 模拟不同类的非静态方法

class - Flutter中的颜色和颜色类

jQuery 设置然后读取文本框上的只读属性

.net - 您可以在运行时评估方法的属性吗?

c++ - 分配结构列表的 vector

python - 如何使用 split 函数在 python 中拆分单个列表的子列表?

java - hasPrevious() 方法不起作用