私はこれをしばらくの間-1の解像度で使用していて、-1を使用せずにforループの配列の範囲外を修正する方法があるかどうか疑問に思っていました。お知らせ下さい?
for(int i = 0; i < hand.length - 1 ; i++)
{
if(this.hand[i].getRank() == this.hand[i + 1].getRank())
return true;
}
ランクが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;
}
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-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
この方法の短所の1つは、要素ではなく、配列全体を反復処理することです。
あなたが投稿した方法は、効率と明快さの点で実際には良い解決策だと思います。