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;
}

Open in new window




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
How to improve my design, approach, code? please advise
LVL 7
gudii9Asked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
Hammadh Abdul RahmanConnect With a Mentor 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
 
d-glitchCommented:
There is one else in your pseudo code, but four in you code.
What does that mean?
0
 
awking00Connect With a Mentor 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
 
gudii9Author 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;
}

Open in new window

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.

All Courses

From novice to tech pro — start learning today.