• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 200
  • Last Modified:

copyEvens challenge

I am working on below challenge
http://codingbat.com/prob/p134174

Psedo code:
0. create new array of given count
1. for given arry loop through it
2. check if each element is even or not
3. if even fill till the new array ends
4. return new array
I wrote my code as below

public int[] copyEvens(int[] nums, int count) {
  int[] arr=new int[count];
  for(int i=0;i<nums.length-1;i++){
    if(nums[i]%2==0){
      arr[i]=nums[i];
      
      
    }
  }
  return arr;
}

Open in new window






I am not passing all tests
xpected      Run            
copyEvens([3, 2, 4, 5, 8], 2) → [2, 4]      Exception:java.lang.ArrayIndexOutOfBoundsException: 2 (line number:5)      X      
copyEvens([3, 2, 4, 5, 8], 3) → [2, 4, 8]      [0, 2, 4]      X      
copyEvens([6, 1, 2, 4, 5, 8], 3) → [6, 2, 4]      Exception:java.lang.ArrayIndexOutOfBoundsException: 3 (line number:5)      X      
copyEvens([6, 1, 2, 4, 5, 8], 4) → [6, 2, 4, 8]      [6, 0, 2, 4]      X      
copyEvens([3, 1, 4, 1, 5], 1) → [4]      Exception:java.lang.ArrayIndexOutOfBoundsException: 2 (line number:5)      X      
copyEvens([2], 1) → [2]      [0]      X      
copyEvens([6, 2, 4, 8], 2) → [6, 2]      Exception:java.lang.ArrayIndexOutOfBoundsException: 2 (line number:5)      X      
copyEvens([6, 2, 4, 8], 3) → [6, 2, 4]      [6, 2, 4]      OK      
copyEvens([6, 2, 4, 8], 4) → [6, 2, 4, 8]      [6, 2, 4, 0]      X      
copyEvens([1, 8, 4], 1) → [8]      Exception:java.lang.ArrayIndexOutOfBoundsException: 1 (line number:5)      X      
copyEvens([1, 8, 4], 2) → [8, 4]      [0, 8]      X      
copyEvens([2, 8, 4], 2) → [2, 8]      [2, 8]      OK      
other tests
X      
Your progress graph for this problem

How to improve/modify my design, code and any other alternate approaches. please advise
0
gudii9
Asked:
gudii9
  • 4
1 Solution
 
Subrat (C++ windows/Linux)Software EngineerCommented:
In for loop it should be
I < nums.length

And other observation is,  you are passing no of even elements are 2 but in actuality trying to access 3. So getting array out of bound exception
0
 
Subrat (C++ windows/Linux)Software EngineerCommented:
int temp =0;

for(int i=0;i<nums.length;i++){
      if(nums[i]%2==0 &&  temp < count){
          arr[temp++]=nums[i];
      }
}

But this code can be improved.
0
 
Subrat (C++ windows/Linux)Software EngineerCommented:
public int[] copyEvens(int[] nums, int count) {
  int[] arr=new int[count];
  int temp = 0;
  for(int i=0; i<nums.length; i++){
    if(nums[i]%2==0 &&  temp < count){ 
          arr[temp++]=nums[i]; 
    }
  }
  return arr;
}

Open in new window

0
Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

 
Subrat (C++ windows/Linux)Software EngineerCommented:
Better would be instead of iterating all elements of array, loop only upto your count is reached and exit from loop.

Ex:
public int[] copyEvens(int[] nums, int count) {
  int[] arr=new int[count];
  int temp = 0;
  for(int i=0; (temp < count) && (i < nums.length); ++i){
    if(nums[i]%2==0){ 
          arr[temp++]=nums[i]; 
    }
  }
  return arr;
}

Open in new window

0
 
DonnaCommented:
FYI ... gudii9 has posted about 20 challenges from codingbat.com site...just to watch you guys jump through hoops. Is that what EE does? If it is, I for one, am leaving...
0
 
gudii9Author Commented:
public int[] copyEvens(int[] nums, int count) {
  int[] arr=new int[count];
  int temp = 0;
  for(int i=0;(temp<count)&&(i<nums.length);i++){
    if(nums[i]%2==0){
      arr[temp++]=nums[i];
      
      
    }
  }
  return arr;
}

Open in new window


i like temp approach. Above (with i++ instead of ++i) also passed all tests. Any difference using i++ or ++i in this challenge?
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.

Join & Write a Comment

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now