我正在用 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/