Java 边界数组异常
我使用这个-1分辨率已经有一段时间了,我想知道是否有一种方法可以在不使用-1的情况下纠正for循环的边界排列。请告知Java 边界数组异常,java,arrays,Java,Arrays,我使用这个-1分辨率已经有一段时间了,我想知道是否有一种方法可以在不使用-1的情况下纠正for循环的边界排列。请告知 for(int i = 0; i < hand.length - 1 ; i++) { if(this.hand[i].getRank() == this.hand[i + 1].getRank()) return true; } for(int i=0;i
for(int i = 0; i < hand.length - 1 ; i++)
{
if(this.hand[i].getRank() == this.hand[i + 1].getRank())
return true;
}
for(int i=0;i
记住,如果要迭代集合中的所有项,可以对每个表单使用:
for (YourClass item : collection) {
// do something with item
}
编辑:仅显示使用迭代器的方法
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;
int-nextotcompare=1;//数组中要与当前项进行比较的下一项的索引
用于(项目:此手){
if(nextToCompare
这种方法的一个缺点是它在整个数组中迭代,而不是在n-1
元素上迭代
我认为你发布的方法实际上是一个很好的解决方案,从效率和清晰性来看。假设排名是一个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;
}
int-prevRank=this.hand[0].getRank();
对于(int i=1;i
在尝试读取数组之前,可以检查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;
}
for(int i=0;i
虽然我不认为它一定比你已经拥有的更好。也许有人会说我的版本更明确,但我会说你已经做的很好。当然,不要在循环中使用I+1
。这个解决方案有什么问题?I+1
导致ArrayIndexOutbounds,但他一直迭代到hand.length-1
,所以最后一次迭代会很好。@Chopin是的,我想他是说他所拥有的确实有效,但他想知道是否有更好的方法。我没有否决,但我不确定w/o更详细的内容,鉴于OP的代码片段,这解决了问题的根源。也没有否决,但这并不能解决OP的问题。他们希望访问i+1
元素,该元素将在数组中迭代,如果每个循环都有,这是不可能的,除非您创建索引。在这种情况下,您最好使用传统的for
循环。我也没有投反对票(?)。但是,是的,后来我意识到了真正的问题以及为什么这不是一个解决方案。我还在想办法改进我的答案来解决这个问题,但这可能是有史以来最糟糕的例子。也许这会鼓励提问者保留他的实际方法:P否则,我将删除我的答案。@肖邦你基本上可以做维齐尔的答案所做的事情:跟踪上一个元素。this.hand.length
只有在I>=hand.length
时才是真的,因为for循环,这永远不会发生。您仍然没有修复您的条件i
永远不能等于hand.length
,因为一旦它等于hand.length,for循环就会退出。@Jeffrey是的,我真的把自己弄到了一个反向状态,左手边有hand.length
。查看我的编辑