# modThree challenge

I am working on below challenge

http://codingbat.com/prob/p159979

Psedo code description of approach :
1. Loop throguh given array
2. check if array adjacent three elements are even or odd
3. if yes return true
4. if no return false

I wrote my code as below

``````public boolean modThree(int[] nums) {
boolean result=false;

for(int i=0;i<nums.length-2;i++){
if(nums[i]%2==0&&nums[i+1]%2==0&&nums[i+2]%2==0){
result=true;
return result;
}

else if(nums[i+1]%2==0&&nums[i+2]%2==0&&nums[i+3]%2==0){
result=true;
return result;
}

else if(nums[i]%2==1&&nums[i+1]%2==1&&nums[i+2]%2==1){
result=true;
return result;
}

else if(nums[i+1]%2==1&&nums[i+2]%2==1&&nums[i+3]%2==1){
result=true;
return result;
}

else{
result=false;
}
//return result;
}
return result;
}
``````

I am failing couple of  tests
Expected      Run
modThree([2, 1, 3, 5]) → true      true      OK
modThree([2, 1, 2, 5]) → false      false      OK
modThree([2, 4, 2, 5]) → true      true      OK
modThree([1, 2, 1, 2, 1]) → false      false      OK
modThree([9, 9, 9]) → true      true      OK
modThree([1, 2, 1]) → false      false      OK
modThree([1, 2]) → false      false      OK
modThree([1]) → false      false      OK
modThree([]) → false      false      OK
modThree([9, 7, 2, 9]) → false      false      OK
modThree([9, 7, 2, 9, 2, 2]) → false      Exception:java.lang.ArrayIndexOutOfBoundsException: 6 (line number:10)      X
modThree([9, 7, 2, 9, 2, 2, 6]) → true      true      OK
LVL 7
###### Who is Participating?

Commented:
Just remove lines 10-13 and 20-23. Also, the else block is unnecessary.

As the message says, ArrayIndexOutOfBoundsException is occurring at line 10. The same error is possible at line 20 also.

This is because of the reference to nums[i+3]. modThree([9, 7, 2, 9, 2, 2]) would give a array of length 6. Since i<nums.length-2 is the loop condition, max 'i' value would be 3. So nums[3+3] would give error because highest index is 5.
0

Commented:
There is one else in your pseudo code, but four in you code.
What does that mean?
0

Commented:
Again, I might suggest starting at index = 2 and searching backwards (e.g. if i is even and i-1 and i-2 are even or i is odd and i-1 and i-2 are odd) to avoid any invalid index. Note, you would need to check for a minimum array length of 3.
0

Author Commented:
``````public boolean modThree(int[] nums) {
boolean result=false;

for(int i=0;i<nums.length-2;i++){
if(nums[i]%2==0&&nums[i+1]%2==0&&nums[i+2]%2==0){
result=true;
return result;
}

else if(nums[i]%2==1&&nums[i+1]%2==1&&nums[i+2]%2==1){
result=true;
return result;
}
//return result;
}
return result;
}
``````
above passed all tests
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.