5
\$\begingroup\$

An array is called balanced if its even numbered elements (a[0], a[2], etc.) are even and its odd numbered elements (a[1], a[3], etc.) are odd. Write a function named isBalanced that accepts an array of integers and returns 1 if the array is balanced, otherwise it returns 0. Examples: {2, 3, 6, 7} is balanced since a[0] and a[2] are even, a[1] and a[3] are odd. {6, 7, 2, 3, 12} is balanced since a[0], a[2] and a[4] are even, a[1] and a[3] are odd. {7, 15, 2, 3} is not balanced since a[0] is odd. {16, 6, 2, 3} is not balanced since a[1] is even. If you are programming in Java or C#, the function signature is
int isBalanced(int[ ] a)

I first try to check if an even index has odd value and if an odd index has even value, if the condition it yes then count variable value is changed to 0 otherwise it will not change the value of count variable and returns its default value. Here is my solution. Is it possible to combine the loops?

public class inxedOddEven {
static int[] n = {0,3,2,5};
static int l = n.length;
public static void main(String[] arr){
    System.out.println(isBalanced(n));
}
public static int isBalanced(int[] a){
   int count = 1;
   for(int i = 0; i<l;i+=2){
       if(a[i]%2 != 0){
           count = 0;
           break;
       }
}
   for(int j = 1;j< l; j+=2 ){
       if(a[j]%2 == 0){
           count = 0;
           break;
       }
   }
   return count;
 }
}
\$\endgroup\$

1 Answer 1

4
\$\begingroup\$

Yes, it's fairly trivial to combine the loops.

for (int i=0; i<l; i++) {
    if ((a[i] % 2) != (i % 2)) {
        count = 0;
        break;
    }
}

As for the code in general, just a few obvious points.

Names

Even knowing what the code is supposed to do, I'm not quite sure what inxedOddEven is supposed to mean. I guess the OddEven is sort of sensible, but I'm baffled at the meaning of inxed. I'd also tend to avoid l as a name. Depending on the font, it's frequently easy to mistake for a 1.

Types

It seems to me that the obvious type for isBalanced to return would be a Boolean rather than an int.

Pure functions

I'd much rather see isBalanced written as a pure function that depends solely on its parameter. The current situation is rather confused--it receives an array as its parameter, but depends on the fact that l has been initialized to the size of that array before it's been called.

Early returns

If you want to return a value from inside a loop, don't be afraid to just return the value from inside the loop. Looking at things theoretically, it's true that the result is no longer a "single entry, single exit" function, which some structured programming theorists considered an ideal. In reality, however, code like:

for (traverse array and check some condition)
    if (whatever)
        set condition to true
if (condition)
    return one value
else
    return another value

...tends to be fairly opaque compared to:

for (traverse array)
    if (some condition)
       return some value;
return other value;

Summary

Putting those together, our isBalanced might look something like this:

bool isBalanced(int[] inputArray) {
    for (int i=0; i<inputArray.length; i++)
        if ((inputArray[i] % 2) != (i % 2))
            return false;
    return true;
}
\$\endgroup\$
3
  • \$\begingroup\$ I like your logic and the things you pointed out on the program but I used int expect boolean because of the function signature which is in int. \$\endgroup\$
    – Sus Hill
    Commented Jun 11, 2017 at 18:36
  • \$\begingroup\$ @SusHill: Sure--if you're not allowed to change the signature, you do what you have to. Nonetheless, I think a review would be incomplete if it didn't point out that in this case the requirements strike me as...less that optimal. \$\endgroup\$ Commented Jun 11, 2017 at 18:40
  • \$\begingroup\$ Nice answer, but please always put braces after each for/if/... statement :) \$\endgroup\$
    – Imus
    Commented Jun 12, 2017 at 9:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.