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

Java 遍历对象列表并验证属性(int)是否相互跟随(例如:(1,2,3,4),(3,4,5,6),但不是(1,2,5)或(3,4,5,7)),java,list,attributes,int,compare,Java,List,Attributes,Int,Compare,我正在用Java开发一个棋盘游戏,我想验证字母在放在棋盘上时是否相互“接触” 我正在使用一个列表。放置字母时,我将验证其是否垂直或水平对齐(使用字母的(x,y)位置)。我还为我的字母类定制了两个比较器,这样我就可以在x或y位置下对列表进行排序(取决于单词是垂直对齐还是水平对齐) 现在为了验证字母是否相互“接触”,我必须验证x(或y,取决于其对齐方式)是否类似:1,2,3,4,而不是1,2,3,5(这意味着字母3和4之间有一个“空格”) 我必须遍历我的列表,但我不知道我必须在foreach中进行哪

我正在用Java开发一个棋盘游戏,我想验证字母在放在棋盘上时是否相互“接触”

我正在使用一个
列表
。放置字母时,我将验证其是否垂直或水平对齐(使用字母的
(x,y)
位置)。我还为我的
字母
类定制了两个
比较器
,这样我就可以在x或y位置下对
列表进行排序(取决于单词是垂直对齐还是水平对齐)

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

我必须遍历我的
列表
,但我不知道我必须在foreach中进行哪些测试。我必须将第一个对象的
x
与下一个对象的
x
进行比较,它必须是x的位置+1

我希望这是清楚的,这里是我的一些代码片段和涉及的类,这样您就可以了解一些结构。英语不是我的第一门语言,所以如果你需要任何精确性,请随时询问。提前感谢您的帮助

由于我没有在stackoverflow上发布太多内容,所以我尽了最大努力在邮件中设置文本格式,希望你们能读懂

公开课信函{
int x,y;
公共int getX(){
//...
}
公共int getY(){
//...
}
公共静态比较器按X比较(字母a,字母b)->{
// ...
}
公共静态比较器按Y比较(字母a,字母b)->{
// ...
}
公共int hashCode(){
//...
}
公共布尔等于(){
//...
}
}
公共类验证字(列表字){
私有列表词;
//...
//列表已排序
for(字母t:word){
//我应该在那里放什么????
}
//...
}

不要对每个循环使用for,因为这样一次只能访问一个
字母
元素。迭代索引并检查下一个元素的x坐标是否大于当前元素的x坐标。例如:

for (int i = 0; i < word.size() - 1; i++) {
    if (word.get(i+1).getX() != (word.get(i).getX() + 1)) {
        // error
    }
}
for(int i=0;i
不要对每个循环使用for,因为这样一次只能访问一个
字母
元素。迭代索引并检查下一个元素的x坐标是否大于当前元素的x坐标。例如:

for (int i = 0; i < word.size() - 1; i++) {
    if (word.get(i+1).getX() != (word.get(i).getX() + 1)) {
        // error
    }
}
for(int i=0;i
当我对编程相对陌生时,一个更有经验的家伙向我解释了“纠察队围栏问题”:在每对相邻的纠察队之间都有一个缺口。如果将桩编号从1到n,则间隙可以从1到n-1或从2到n进行编号

因此,如果
列出字母
是纠察队,则它们的编号从0到letters.size()-1。间隙-到相邻字母之间的距离-从0到字母进行编号。size()-2

for(int-iLetter=0;iLetter
如果愿意,可以将循环编写为

for( int iLetter = 0; iLetter <= letters.size() - 2; iLetter++ ){

for(int-iLetter=0;iLetter当我对编程相对陌生时,一个更有经验的家伙向我解释了“纠察栅栏问题”:每对相邻的纠察队员之间都有一个间隙。如果你将纠察队员从1到n编号,间隙可能从1到n-1或从2到n编号

因此,如果
列出字母
是桩号,则它们的编号范围为0到letters.size()-1。而间隙(到相邻字母之间的距离)的编号范围为0到letters.size()-2

for(int-iLetter=0;iLetter
如果愿意,可以将循环编写为

for( int iLetter = 0; iLetter <= letters.size() - 2; iLetter++ ){

for(int-iLetter=0;iLetter)我尝试了一些非常类似的方法,但在某个点上,我以
indexootfboundsexception
结束,因为
单词.get(I+1)
for的最后一次迭代中loop@raphh确保循环条件为
i
我哦,是的,没错,我的反应是“如果我一直到
word.size()-1
我会错过一个字母”,但正如您所解释的,这并不重要,因为我看到的是字母之间的间距。因此,当我看到倒数第二个字母时,我可以验证该字母和最后一个字母之间的间距。我尝试了一些非常类似的方法,但在某个点上,由于
单词.get(I+1),我以
IndexOutOfBoundsException
结束
在为
loop@raphh确保循环条件为
i
i哦,是的,我的反应是“如果我一直到
word.size()-1
我会错过一个字母”,但正如你所解释的,这并不重要,因为我看到的是字母之间的间距。因此,当我看到倒数第二个字母时,我可以验证该字母和最后一个字母之间的间距。哦,我明白了。这是一种不同的解决问题的方法,但永远不会真正有趣。将其保留在mi中可能有用谢谢你的意见。哦,我明白了。这是一种不同的解决问题的方法,但永远都不是真正有趣的方法。将来记住这一点可能会有用。谢谢你的意见。