Home > Back-end >  Java program won't show the entire output - the reverse of an inputted integer
Java program won't show the entire output - the reverse of an inputted integer

Time:02-04

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
  •  Tags:  
  • Related