I have a program that is meant to take a user's input (a two digit integer) and output the reverse of it. While it compiles with no errors, it only outputs the first integer but not the second.
Code of the program:
//Set variable
int reversed = 0;
int requiredLength = 2;
//Get User Input
Scanner sc = new Scanner(System.in);
System.out.println("Enter a two-digit number:");
while (sc.hasNext()) {
//Conditional for User Input
if (sc.hasNextInt()) {
//Set scanner variables
int num = sc.nextInt();
int numLength = String.valueOf(num).length();
if (numLength == requiredLength) {
//Reverse integer
int digit = num % 10;
reversed = reversed * 10 digit;
num /= 10;
System.out.println("Reversed Number: " reversed);
break;
} else {
//Error message
System.out.println("Error: Input integer with two-digits");
System.out.print("Please, enter a two-digit number:\n");
}//End of conditional
} else {
//Error message
System.out.println("Error: Input not an integer");
System.out.print("Please, enter a two-digit number:\n");
sc.next();
}//End of conditional
}//End of while loop
Preferred output:
Please enter a two-digit number:
45
Reversed: 54
Actual output
Enter a two-digit number:
45
Reversed: 5
What's wrong?
CodePudding user response:
Your problem is here
if (numLength == requiredLength) {
//Reverse integer
int digit = num % 10;
reversed = reversed * 10 digit;
num /= 10;
System.out.println("Reversed Number: " reversed);
break;
}
I suspect you meant to include this in a loop over the digits, and then got confused with your loop over the inputs. Since you know it's just two digits, you can just do this.
if (numLength == requiredLength) {
//Reverse integer
int digit = num % 10;
int reversed = 10 * digit num / 10;
System.out.println("Reversed Number: " reversed);
break;
}
CodePudding user response:
Your problem solved!! You forgot to write while loop there:
while (num!=0){
int digit = num % 10;
reversed = reversed * 10 digit;
num /= 10;
}
this while loop divides number every time by 10, and add digit to reversed number in each loop, while number will be equal to 0 the loop will be break
Now this is your whole working code:
int reversed = 0;
int requiredLength = 2;
//Get User Input
Scanner sc = new Scanner(System.in);
System.out.println("Enter a two-digit number:");
while (sc.hasNext()) {
//Conditional for User Input
if (sc.hasNextInt()) {
//Set scanner variables
int num = sc.nextInt();
int numLength = String.valueOf(num).length();
if (numLength == requiredLength) {
//Reverse integer
while (num!=0){
int digit = num % 10;
reversed = reversed * 10 digit;
num /= 10;
}
System.out.println("Reversed Number: " reversed);
break;
} else {
//Error message
System.out.println("Error: Input integer with two-digits");
System.out.print("Please, enter a two-digit number:\n");
}//End of conditional
} else {
//Error message
System.out.println("Error: Input not an integer");
System.out.print("Please, enter a two-digit number:\n");
sc.next();
}//End of conditional
}//End of while loop
CodePudding user response:
This logic has to be iterated through each digit of input number, So try to add it into loop
while(number != 0){
mod = number % 10;
number = number / 10;
result = result * 10 mod;
}
CodePudding user response:
If n is the number, then n gives you the right digit and n/10 would give you the left digit.
To combine them into a single number, you need to move the right digit to the left by multiplying it by 10. Then add the number from the left.
int n = 31;
if (n/10 < 10){
System.out.println(n*10 n/10);
}
output:
31
13
