Finding the sum of numbers in an array – excluding the number 13 and the number directly after it

  • A+
Category:Languages

I would like to write a program in Java which, given an array, finds the sum of all the numbers in the array - with an exception! Since the number 13 is very unlucky, I propose that we shall completely exclude the number 13, and the number directly after 13, if it exists, from the total sum.

The program, which I shall call sum13 , should produce the following results from the following inputs (these are just a few examples):

sum13([1,2,2,1]) = 6 This one is normal; no 13's here.

sum13([5, 13, 2]) = 5 The 13 and the number directly after the 13 are excluded.

sum13([13, 13]) = 0 The array contains only 13's, so neither of them are included.

sum13([1, 2, 13, 2, 1, 13]) = 4 A slightly longer example of the expected output.

Here is the code which I came up with for sum13 :

public int sum13(int[] nums) {   int sum = 0;   for (int i = 0; i < nums.length; i++) {     // we start by adding all the non-13s to the sum     if (nums[i] != 13) sum += nums[i];   }   // now we go back and remove all the non-13s directly after a 13   for (int j = 0; j < nums.length; j++) {     // the outermost loop checks if the numbers are a 13     if (nums[j] == 13 && j < nums.length - 1) {       for (int k = j + 1; k < nums.length; k++) {         // this loop checks that the number after the 13 is not a 13         if (nums[k] != 13) {           sum -= nums[k];           break;         }        }     }   }   return sum; } 

The program above works, although it does look quite messy!

Is there a better way of writing such a program that doesn't include multiple loops and nested ifs?

 


Well, you use i as iterator. just make i++ when the current number is 13. This way, not only you don't add 13 to the sum but you also skip the next value.

public int sum13(int[] nums) {   int sum = 0;   for (int i = 0; i < nums.length; i++) {     // we start by adding all the non-13s to the sum     if (nums[i] != 13){      sum += nums[i];     }     else {      i++;     }   }  return sum; } 

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: