Solved

# copyEvens challenge

Posted on 2016-08-30
63 Views
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;
}
``````

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
Question by:gudii9
• 4

LVL 8

Expert Comment

ID: 41777457
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

LVL 8

Expert Comment

ID: 41777460
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

LVL 8

Expert Comment

ID: 41777468
``````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;
}
``````
0

LVL 8

Accepted Solution

Subrat (C++ windows/Linux) earned 500 total points
ID: 41777470
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;
}
``````
0

LVL 3

Expert Comment

ID: 41777472
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

LVL 7

Author Comment

ID: 41780956
``````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;
}
``````

i like temp approach. Above (with i++ instead of ++i) also passed all tests. Any difference using i++ or ++i in this challenge?
0

## Featured Post

Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
This is about my first experience with programming Arduino.
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.