java dev
java dev

Reputation: 29

how to calculate the sum of digits for a number in java?

i have a small function that ask user to enter a positive number than give him the reverse and calculate the sum of its digits.

the first part of code work fine but the sum of digits return zero how to solve this problem ?

i know that the user input must be asked one time to be entered and not twice so how to fix this function because it do not take the user input.

code:

package exam3Programing1_20_12_2010;

import java.util.Arrays;
import java.util.Scanner;

public class Question3 {

    private int num;
    private int sum;
    private int reverse;


    public int fill() {

        System.out.println("enter the number");
        Scanner in = new Scanner(System.in);
        num = in.nextInt();

        if (num < 0) {
            System.out.println("enter a positive number");
        }
        while (num != 0) {
            reverse = reverse * 10;
            reverse = reverse + num % 10;
            num = num / 10;
        }
        System.out.println("your reverse number is : " + reverse);
        return num;
    }

    public void sumDigits() {

        while (num != 0) {
            sum = sum + num % 10;
            num = num / 10;
        }

        System.out.println("sum of digits: " + sum);
    }

    public static void main(String[] args) {

        Question3 q3 = new Question3();
        q3.fill();
        q3.sumDigits();
    }
}

output

enter the number
1234
your reverse number is : 4321
sum of digits: 0

the updated code

package exam3Programing1_20_12_2010;

import java.util.Arrays;
import java.util.Scanner;

public class Question3 {

    private int num;
    private int sum;
    private int reverse;


    public int fill() {

        int myNumber = num;
        System.out.println("enter the number");
        Scanner in = new Scanner(System.in);
        myNumber = in.nextInt();

        if (myNumber < 0) {
            System.out.println("enter a positive number");
        }
        while (myNumber != 0) {
            reverse = reverse * 10;
            reverse = reverse + myNumber % 10;
            myNumber = myNumber / 10;
        }
        System.out.println("your reverse number is : " + reverse);
        return num;
    }

    public void sumDigits() {

        while (num != 0) {
            sum = sum + num % 10;
            num = num / 10;
        }

        System.out.println("sum of digits: " + sum);
    }

    public static void main(String[] args) {

        Question3 q3 = new Question3();
        q3.fill();
        q3.sumDigits();
    }
}

updated output

enter the number
1234
your reverse number is : 4321
sum of digits: 0

Upvotes: 0

Views: 4576

Answers (4)

user4074848
user4074848

Reputation:

i have somewhat updated your code and gives correct answer:

import java.util.Arrays; import java.util.Scanner;

public class Question3 {

private int num;
private int sum;
private int reverse;


public int fill() {

    System.out.println("enter the number");
    Scanner in = new Scanner(System.in);
    num = in.nextInt();

    if (num < 0) {
        System.out.println("enter a positive number");
    }
    while (num != 0) {
        reverse = reverse * 10;
        reverse = reverse + num % 10;
        num = num / 10;
    }
    System.out.println("your reverse number is : " + reverse);
    return reverse;
}

public void sumDigits(int number) {
    num = number;

    while (num != 0) {
        sum = sum + num % 10;
        num = num / 10;
    }

    System.out.println("sum of digits: " + sum);
}

public static void main(String[] args) {

    Question3 q3 = new Question3();
   int number =  q3.fill();
    q3.sumDigits(number);
}

}

Upvotes: 0

SMA
SMA

Reputation: 37103

That's because you are sharing same number in both reverse and sum method and when you first call reverse method you go on dividing the number until 0 and hence when you come to sum method, your number is 1 and hence sum is 0.

Inorder to rectify this, i would suggest you define local variable called mynumber like:

public int fill() {

    System.out.println("enter the number");
    Scanner in = new Scanner(System.in);
    num = in.nextInt();

    if (num < 0) {
        System.out.println("enter a positive number");
    }
    int myNumber = num;  
    while (myNumber != 0) {
        reverse = reverse * 10;
        reverse = reverse + myNumber % 10;
        myNumber = myNumber / 10;
    }
    System.out.println("your reverse number is : " + reverse);
    return num;
}

OUTPUT:
enter the number
1234
your reverse number is : 4321
sum of digits: 10

Upvotes: 1

Lajos Arpad
Lajos Arpad

Reputation: 77063

Your num member initializes by reading a number and with this loop:

    while (num != 0) {
        reverse = reverse * 10;
        reverse = reverse + num % 10;
        num = num / 10;
    }

you are calculating the reverse, but you modify the value of num in the process. After the loop, num's value is 0 and later, when you try to use it, you have already lost its value. Try to do this instead:

    reverse = 0;
    int tempNum = num;
    while (tempNum != 0) {
        reverse = reverse * 10;
        reverse = reverse + tempNum % 10;
        tempNum = tempNum / 10;
    }

This code initializes reverse with 0, stores the value of num as a temporary value and you modify tempNum in the process, thus the value of num is left unchanged and you can use it later.

Upvotes: 0

chiastic-security
chiastic-security

Reputation: 20520

You're reusing num in a rather unhelpful way. Try to define local variables for methods, and use instance fields only where you need them.

Notice also that your fill() method returns a value that you're not using.

This suggests that you should remove your num field entirely. Then add a local variable num to your fill() method, and then change the signature of sumDigits() to take a parameter:

public void sumDigits(int num)

Now your code at the end becomes

Question3 q3 = new Question3();
int n = q3.fill();
q3.sumDigits(n);

Upvotes: 1

Related Questions