elseshawe
elseshawe

Reputation: 161

Write a method to work out the sum of the first n odd numbers

First of all let me say I am quite new to programming its been my second week since I started so if you see any bad practice or error in code please accept my apologies.

I want to print sum of first n odd numbers. But so far I can only do the sum of odd number up to the given number. kindly help.

public static void main(String[] args) 
{
    Scanner userInput = new Scanner(System.in);

    System.out.print("Please enter the number : ");
    int num1 = userInput.nextInt();

    int sum = sumOfOdd(num1);
    System.out.println("sum of first " +num1 + " odd numbers is " + sum);

    userInput.close();
}

static int sumOfOdd(int num)
{
    int sum = 0;
    for (int i = 0; i <= num; i++)
    {
        if(i % 2 != 0)
        {
            sum += i;
        }
    }
    return sum;
}
}

Upvotes: 4

Views: 7976

Answers (9)

Karan
Karan

Reputation: 1

import java.util.*;

class karan{
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int i = n;
        int sumOddNumber = n * i;

        System.out.println(n*i);
    }
}

Upvotes: 0

Persixty
Persixty

Reputation: 8589

Another alternative.

static int sumOfOdd(int num) {
    int sum = 0;
    int last = 2*num-1;
    for (int i = 1; i <= last; i+=2){
        sum += i;
    }
    return sum;
}

Obviously return num*num; is the most efficient but if you're obliged to use a loop then this method avoids a * inside the loop.

This will be a tiny (tiny) bit more efficient than:

    for (int i = 0; i < num; ++i){
        sum += 2*i+1;
    }

Upvotes: 0

Sash Sinha
Sash Sinha

Reputation: 22370

Try this it uses a for loop that increments by two to only account for odd numbers.

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.print("Enter the value of n: ");
    int n = scanner.nextInt();

    System.out.println("The sum of the first " + n + " odd numbers is: " + sumOfOddNumbers(n));
  }

  public static int sumOfOddNumbers(int n) {
    int sum = 0;
    for(int i = 1; i < n*2; i+=2) {
      sum += i;
    }
    return sum;
  }
}

Example usage:

Enter the value of n:  5
The sum of the first 5 odd numbers is: 25

Upvotes: 3

Isuranga Perera
Isuranga Perera

Reputation: 510

You don't have to use a loop at all

static int sumOfOdd(int num) {
    return num*num;
}

For Any Arithmetic Progression, the sum of numbers is given by,

Sn=1/2×n[2a+(n-1)×d]

Where,

Sn= Sum of n numbers

n = n numbers

a = First term of an A.P

d= Common difference in an A.P

Using above formula we can derive this quick formula to calculate sum of first n odd numbers,

Sn(odd numbers)= n²

Upvotes: 9

Mathias G.
Mathias G.

Reputation: 5085

Change the counter to the number of times you add an odd number to the sum value...

static int sumOfOdd(int num) {
    int sum = 0;
    int i = 0;
    int count = 0;
    do {
        if(i % 2 != 0) {
            sum += i;
            count++;
        }
        i++;
    } while (count < num);
    return sum;
}

Or even cleaner:

static int sumOfOdd(int num) {
    int sum=0;
    for (int i=1;i<num*2;i+=2) {
        sum=sum+i;
    }
    return sum;
}

Upvotes: 1

Sergey Emeliyanov
Sergey Emeliyanov

Reputation: 6961

Here is the complete code you'd be using:

public class YourClass {

    public static void main(String[] args)
    {
        Scanner userInput = new Scanner(System.in);

        System.out.print("Please enter the number : ");
        int num1 = userInput.nextInt();

        int sum = sumOfOdd(num1);
        System.out.println("sum of first " +num1 + " odd numbers is " + sum);

        userInput.close();
    }

    static int sumOfOdd(int num)
    {
        int counter = 0;
        for (int i = 0;; i++)
        {
            int sum = 0;
            if(i % 2 != 0)
            {
                counter++;
                sum += i;
            }
            if(counter == num) return sum;
        }
    }
}

Upvotes: 0

desoss
desoss

Reputation: 622

Since you don't know how many loop cycles are required you have to change the exit condition of the for loop. Or you can use a while loop exploiting the same exit condition.

static int sumOfOdd(int num){
  int sum = 0;
  int counter = 0;
  int currentNumber = 0;
  while (counter<num){
      if(currentNumber % 2 != 0){
          sum += currentNumber;
          counter++;
      }
      currentNumber++;

  }
  return sum;
}

Upvotes: 0

Strahinja
Strahinja

Reputation: 460

You should count how many numbers have you added and in the condition to check if count of numbers you summed is less or equal than your n. Just add the counter in your for loop and set condition to: count <= num and it should work.
Every time you add a number to the sum increment the count by count++.
The code suppose to look like this:

static int sumOfOdd(int num)
{
    int sum = 0;
    int count = 0;
    for (int i = 0, count= 0; count <= num; i++)
    {
        if(i % 2 != 0)
        {
            sum += i;
            count++;
        }
    }
return sum;
}

I haven't checked it, but it should be correct

Upvotes: 0

Thomas B&#246;hm
Thomas B&#246;hm

Reputation: 1486

Try this:

static int sumOfOdd(int num) {
    int sum = 0;
    for (int i = 0; i < num; i++){
        sum += i*2+1;
    }
    return sum;
}

It sums up all odd numbers until the limit is reached.

With i*2+1 you get the next odd number. Then you add it to the sum.

Tested with System.out.println(sumOfOdd(4)); and got the expected result 16 (1+3+5+7)

Upvotes: 2

Related Questions