Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 边界数组异常_Java_Arrays - Fatal编程技术网

Java 边界数组异常

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

我使用这个-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 (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
。查看我的编辑