0

I'm limping through a basic java class and have a really hard time thinking programmatic-ally so bear with me here. I'm supposed to write a program that sums all of the odd numbers in a user-defined range - simple right? Well I thought I had the code figured out to do it, but the math always comes in wrong. Instead of the range of 1 through 14 equaling 19 (1 + 3 + 5 ...), the program returns 46. It's only off by 3 so that makes me feel like I'm getting pretty close to correct code.

Here's the current sample output:

The value input is 14
DEBUG:   The current value of variable sum is: 4
DEBUG: The current value of variable ctr is: 3
DEBUG:   The current value of variable sum is: 10
DEBUG: The current value of variable ctr is: 7
DEBUG:   The current value of variable sum is: 22
DEBUG: The current value of variable ctr is: 11
DEBUG:   The current value of variable sum is: 46
DEBUG: The current value of variable ctr is: 15
The sum of the odd numbers from 1 to 14 is 46

Here's the troublesome method:

    public static void calcSumPrint(int topEndNumber) {
    //calc and print sum of the odd number from 1 to top-end number
    //uses loop to add odd numbers 
    //display results: range (eg: 1 to 13), sum of odd numbers
        for (ctr = 1; ctr <= topEndNumber; ctr = ctr + 2) {
            nextOddNumber = sum + 2;
            sum = sum + nextOddNumber;
            ctr = ctr + 2;
            if (debug) {
                System.out.println("DEBUG:   The current value of variable sum is: " + sum);
                System.out.println("DEBUG: The current value of variable ctr is: " + ctr);
            }
        }   

        System.out.println("The sum of the odd numbers from 1 to " + topEndNumber + " is " + sum);

    }//end of calcSumPrint

Here's the program:

import java.util.Scanner;

public class sumOdds {
    static int topEndNumber = 0;
    static int ctr = 0;
    static int intermediateSum = 0;
    static int sum = 1;
    static boolean debug = true;
    static int nextOddNumber = 0;


    public static void main(String[] args) {
        getLimitNumber();
        System.out.println("The value input is " + topEndNumber);
        calcSumPrint(topEndNumber);

    }//end of main

    public static int getLimitNumber() {
        //lets uer input top-end number to be used in program [X]
        //catches exception if non-integer value is used [X]
        //verifies that the input number has a value of at least 1 [ ]
        //returns verified int to method caller [ ]
        Scanner input = new Scanner(System.in);
        boolean done = false;
        while (done != true) {
            try {
                System.out.println("Enter a positive whole top-end number to sum odds of:");
                topEndNumber = input.nextInt();
                    if (topEndNumber <= 0){
                        throw new NumberFormatException();
                    }
                done = true;
            }//end of try
            catch (Exception message) {
                //put exception in here
                input.nextLine();
                System.out.println("Bad input, retry");
            }//end of catch
        }//end of while
        input.close();


        //to shut up eclipse
        return topEndNumber;


    }//end of getLimitNumber

    public static void calcSumPrint(int topEndNumber) {
    //calc and print sum of the odd number from 1 to top-end number
    //uses loop to add odd numbers 
    //display results: range (eg: 1 to 13), sum of odd numbers
        for (ctr = 1; ctr <= topEndNumber; ctr = ctr + 2) {
            nextOddNumber = sum + 2;
            sum = sum + nextOddNumber;
            ctr = ctr + 2;
            if (debug) {
                System.out.println("DEBUG:   The current value of variable sum is: " + sum);
                System.out.println("DEBUG: The current value of variable ctr is: " + ctr);
            }
        }   

        System.out.println("The sum of the odd numbers from 1 to " + topEndNumber + " is " + sum);

    }//end of calcSumPrint

    public static int doAgain() {
    //ask and verify the user wants to re-run program, return int

    //to shut up eclipse
        return 20000;
    }//end of doAgain

}//end of class

Does anything jump out at you that I might be missing? I'd love to figure this one out and have been visualizing the algorithm on and off throughout the day at the office, it's driving me nuts that the math doesn't work out.

1
  • Why are you incrementing ctr twice: ctr = ctr + 2; Commented Mar 19, 2015 at 0:46

1 Answer 1

2

In your for loop the value of ctr is already incremented by two

so

sum = 0;
for (ctr = 1; ctr <= topEndNumber; ctr = ctr + 2) {
        sum += ctr;
} 

will give you the required answer.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks very much that totally worked once I figured out how it fit with my existing code.

Your Answer

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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.