Reputation: 29
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.
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();
}
}
enter the number
1234
your reverse number is : 4321
sum of digits: 0
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();
}
}
enter the number
1234
your reverse number is : 4321
sum of digits: 0
Upvotes: 0
Views: 4576
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
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
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
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