Solved

# array11 challenge

Posted on 2016-09-21
50 Views
Hi,

I am working on below challenge.
http://codingbat.com/prob/p135988
Psedo code:
1. create new array of the portion of original array length

2. check to see if if given index has 1 and next index also has 1iif yes return increment count by 1
3.else repeat recursion

I wrote my code as below
``````public int array11(int[] nums, int index) {
int count=0;

if(nums.length==0){
return 0;
}

/*   if(index>=nums.length){
return 0;
}*/
if(index>=nums.length){
return 0;
}
else if((nums[index]==1)&&nums[index+1]==11){
return count++;
}
else return array11(nums,index+1);

}
``````

i am failing some tests
Expected      Run
array11([1, 2, 11], 0) → 1      0      X
array11([11, 11], 0) → 2      0      X
array11([1, 2, 3, 4], 0) → 0      0      OK
array11([1, 11, 3, 11, 11], 0) → 3      0      X
array11([11], 0) → 1      0      X
array11([1], 0) → 0      Exception:java.lang.ArrayIndexOutOfBoundsException: 1 (line number:14)      X
array11([], 0) → 0      0      OK
array11([11, 2, 3, 4, 11, 5], 0) → 2      0      X
array11([11, 5, 11], 0) → 2      0      X
other tests
OK

0
Question by:gudii9
• 8
• 4
• 4

LVL 7

Author Comment

``````public int array11(int[] nums, int index) {
int count=0;

/* if(nums.length==0){
return 0;
}*/

if(index>=nums.length){
return 0;
}
if(nums[index]==11){
return 1+array11(nums,index+1);
}
/* else if((nums[index]==1)&&nums[index+1]==11){
return count++;
}*/
else return array11(nums,index+1);

}
``````

above passed all. any improvements or alternate approaches?
0

LVL 32

Accepted Solution

sarabande earned 250 total points
you should remove the commented parts and the final 'else'.

since you have a return in the if block above the else statement  the 'else' keyword can (and should) be omitted.

Sara
0

LVL 29

Expert Comment

Pseudo code above is wrong.

Working solution (one of) is:

``````        public int array11(int[] nums, int index)
{
int count = 0;

if (index >= nums.Length)
{
return  0;// we need to stop recursion immediately and prevent any index out of range exceptions
}
else if (nums[index] == 11)
{
count = 1;
}

return count + array11(nums, index + 1);
}
``````

Output on my machine (I wrote in C#):

array11([11, 11], 0)  = 2
array11([1, 2, 3, 4], 0)  = 0
array11([1, 11, 3, 11, 11], 0)  = 3
array11([11], 0)  = 1
array11([1], 0)  = 0
array11([], 0)  = 0
array11([11, 2, 3, 4, 11, 5], 0)  = 2
array11([11, 5, 11], 0)  = 2
0

LVL 29

Assisted Solution

anarki_jimbel earned 250 total points
Below is Java code you may run on the web site:

``````public int array11(int[] nums, int index) {
int count = 0;

if (index >= nums.length)
{
return  0;// we need to stop recursion immediately and prevent any index out of range exceptions
}
else if (nums[index] == 11)
{
count = 1;
}

return count + array11(nums, index + 1);
}
``````
0

LVL 7

Author Comment

you should remove the commented parts and the final 'else'.

if i remove else getting below error
``````public int array11(int[] nums, int index) {
int count=0;
if(index>=nums.length){
return 0;
}
if(nums[index]==11){
return 1+array11(nums,index+1);
}

}
``````

Compile problems:

Error:      public int array11(int[] nums, int index) {
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This method must return a result of type int

Possible problem: the if-statement structure may theoretically
allow a run to reach the end of the method without calling return.
Consider adding a last line in the method return some_value;
so a value is always returned.

see Example Code to help with compile problems

0

LVL 32

Expert Comment

if i remove else getting below error

``````public int array11(int[] nums, int index) {
int count=0;

/* if(nums.length==0){
return 0;
}*/

if(index>=nums.length){
return 0;
}
if(nums[index]==11){
return 1+array11(nums,index+1);
}
/* else if((nums[index]==1)&&nums[index+1]==11){
return count++;
}*/
else return array11(nums,index+1);

}
``````

if you would remove commented statements and final 'else' you get

``````public int array11(int[] nums, int index) {
int count=0;

if(index>=nums.length){
return 0;
}
if(nums[index]==11){
return 1+array11(nums,index+1);
}
return array11(nums,index+1);

}
``````

note, i said the final 'else' and not the final 'else statement/block'.

the 'else' is not needed when the if block before ends with a return statement.

Sara
0

LVL 7

Author Comment

note, i said the final 'else' and not the final 'else statement/block'.

the 'else' is not needed when the if block before ends with a return statement.

got it. new to me else not needed when if block before ends with a return. any other detailed links on this concept to read or any other examples on it?
0

LVL 32

Expert Comment

new to me else not needed when if block before ends with a return

that is not a concept but basic boolean logic:

``````if (some_condition)
{
do_something();
return;
}
// if you reached this point, some_condition was false and
// therefore you are effectively in an 'else' block here.

do_something_else();
return;
``````

the above is equivalent to

``````if (some_condition)
{
do_something();
return;
}
else
{
do_something_else();
return;
}
``````

note, i would recommend to always use {} for if and else.

Sara
0

LVL 7

Author Comment

that is not a concept but basic boolean logic:
if (some_condition)
{
do_something();
return;
}
// if you reached this point, some_condition was false and
// therefore you are effectively in an 'else' block here.

do_something_else();
return;

Select all

Open in new window

the above is equivalent to

if (some_condition)
{
do_something();
return;
}
else
{
do_something_else();
return;
}
above is very clear
after if it is implicitly else whether we write or not

But recommended to use explicit else with { and }
0

LVL 32

Expert Comment

But recommended to use explicit else with { and }

actually, it is a matter of style and therefore it is recommended to always do it same way and use the method which is better readable. the readability may be different for you and me. i like the first better (without else), but you may use the second one. anyway, you should not omit the barckets if using 'else'.

Sara
0

LVL 7

Author Comment

sure
0

LVL 7

Author Comment

``````public int array11(int[] nums, int index) {
int count=0;

if(index>=nums.length){
return 0;
}
if(nums[index]==11){
return 1+array11(nums,index+1);
}
return array11(nums,index+1);

}
``````

how above different from below

``````public int array11(int[] nums, int index) {
int count=0;

if(index>=nums.length){
return 0;
}
else if(nums[index]==11){
return 1+array11(nums,index+1);
}
return array11(nums,index+1);

}
``````

when to use above when to use below.
i confuse always with above 2 use cases?
0

LVL 7

Author Comment

both of above constructs passes all tests?

any preference one over other here or in general?
0

LVL 29

Expert Comment

There is no difference really. In both cases you check the first condition:
(index>=nums.length)
If it is not satisfied - you test second condition:
(nums[index]==11)

If you want you may check what is compiled CIL code. I have suspicion it will be exactly same.

One note: there is no point to declare
int count=0;
You do not use the variable.
0

LVL 7

Author Comment

If you want you may check what is compiled CIL code.

how to check this?
0

LVL 29

Expert Comment

You may use something like http://ilspy.net/

Try to search for "How can I view MSIL / CIL generated by C# compiler?"
0

## Featured Post

### Suggested Solutions

Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
Viewers will learn about basic arrays, how to declare them, and how to use them. Introduction and definition: Declare an array and cover the syntax of declaring them: Initialize every index in the created array: Example/Features of a basic arr…
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.