2016-03-27 18 views
1

私は中期的に練習して問題の1つを見て、例を挙げてbat.comをコーディングしていました。なぜ彼らはforループ条件文でlength-2をやっているのですか?私はなぜ2を減算しなければならないのでしょうか、おそらくここで誰かがすぐにそれを説明することができます。私はそれが私が得ていない非常に単純なことを知っています。ありがとう!配列のforループ(java)に固執しています。 [i]、[i + 1]、[i + 2]

質問: `

Given an array of ints, return true if .. 1, 2, 3, .. appears in the array somewhere. 

array123({1, 1, 2, 3, 1}) → true 
array123({1, 1, 2, 4, 1}) → false 
array123({1, 1, 2, 1, 2, 3}) → true` 

ソリューション:IndexOutOfBound例外をスローしないようにするためには

public boolean array123(int[] nums) { 
    // Note: iterate < length-2, so can use i+1 and i+2 in the loop 
    for (int i=0; i < (nums.length-2); i++) { 
    if (nums[i]==1 && nums[i+1]==2 && nums[i+2]==3) return true; 
    } 
    return false; 
} 
+0

あなたの質問は、ソリューションに含まれているコメントに既に回答済みです。 nums.lengthを使用すると、ArrayIndexOutOfBoundsExceptionが発生します。 – RubioRic

+0

それはあなたがi + 1とi + 2を使うことができるように言いますが、それは私には分かりません。申し訳ありません、私は初心者です。なぜArrayIndexOutOfBounds例外が発生するのか知りたいのですが、それは私が求めていることです。 – rcv6000

+0

配列に3つの数字しかない場合、nums.lengthは3になります。ループの2番目の反復で、iが1の場合、num [i + 2]にアクセスしようとすると、num [3 ]、あなたの配列に存在しない位置。 3つの長さの配列には、位置0,1、および2しかありません。 – RubioRic

答えて

2

-2がなく、最後の要素に到達し、インデックスの要素(最後の1 + 2)にアクセスしようとしているコードで、利用できないインデックスに到達したいので例外がスローされます。

+1

それは理にかなっています!説明をありがとう、私は今それを得る。 – rcv6000

関連する問題