我一直在使用这个 - 1分辨率一段时间了,并且想知道是否有办法在不使用-1的情况下纠正for循环arrayoutofbounds。请指教?
for(int i = 0; i < hand.length - 1 ; i++)
{
if(this.hand[i].getRank() == this.hand[i + 1].getRank())
return true;
}
答案 0 :(得分:2)
假设排名为int
int prevRank = this.hand[0].getRank();
for(int i = 1; i < hand.length; i++)
{
int currentRank = this.hand[i].getRank();
if(currentRank == prevRank)
return true;
prevRank = currentRank;
}
答案 1 :(得分:2)
在尝试从数组中读取之前,您可以检查i +1
元素是否存在。
这样的事情会起作用:
for(int i = 0; i < hand.length; i++)
{
if(i + 1 < this.hand.length && this.hand[i].getRank() == this.hand[i + 1].getRank())
return true;
}
虽然我认为它不一定比你已经拥有的更好。也许有人可能会说我的版本更明确,但我会说你已经做的很好。
答案 2 :(得分:-2)
请记住,如果要迭代集合中的所有项目,可以使用for-each
表单:
for (YourClass item : collection) {
// do something with item
}
http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html
编辑:只是为了展示一种使用迭代器的方法。
int nextToCompare = 1; // the index of the next item in the array to compare with the current item
for (Item item : this.hand) {
if (nextToCompare < this.hand.length // checks if there is next item to compare
&& item.getRank() == this.hand[nextToCompare++].getRank()) {
return true;
}
}
return false;
这种方法的一个缺点是它通过整个数组而不是n - 1
个元素进行迭代。
我认为您发布的方法在效率和清晰度方面实际上是一个很好的解决方案。