Anon_R
Anon_R

Reputation: 71

inputing negative numbers into a number reversal program

My program is supposed to take in random integers and reverse them. It currently works for all positive integers that are no more than ten digits long.

import java.util.Scanner;

public class Program2 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int input;
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter an integer: ");
        input = scanner.nextInt();
        System.out.print("Its reversal is ");
        reverse(input);
        System.out.println();;
    }
    public static void reverse(int number) {
        if(number < 10 && number > 0) {
            System.out.println(number);
            return;
        }
        else {
            System.out.print(number % 10);
            reverse(number/10);
         }
    }   
}

I've been having trouble finding a way for the program to return the reversals of negative numbers. What's the simplest way to do that?

Upvotes: 1

Views: 5778

Answers (2)

user94559
user94559

Reputation: 60143

Per the comments above, it looks like you want the reverse of -123 to be -321. If so, I think this code should work:

public static void reverse(int number) {
    if (number < 0) {
        System.out.print("-");
        reverse(number * -1);
    } else if (number < 10) {
        System.out.println(number);
    } else {
        System.out.print(number % 10);
        reverse(number / 10);
    }
}

(I dropped the && number > 0 because you had an infinite loop if the input is exactly 0.)


Note: this code will give a StackOverflowError for number == Integer.MIN_VALUE, since -Integer.MIN_VALUE == Integer.MIN_VALUE. You can fix this as follows:

if (number < 0) {
  System.out.print("-");
  if (number == Integer.MIN_VALUE) {
    System.out.print(-(number % 10));
    number /= 10;
  }
  reverse(-number);
} else if ...

Upvotes: 8

Harish
Harish

Reputation: 87

I hope this method will help you

public static void reverse(int number) {
if (number < 10 && number > 0) {
  System.out.println(number);
  return;
} else if (number > 0) {
  System.out.print(number % 10);
  reverse(number / 10);
} else {
  System.out.print(number % 10);
  reverse((number / 10) * -1);
}
}

here we are printing the last element as a negative element, after that we are multiplying it with -1 so that the rest of the elements will be positive and positive loop will proceed form the second time.

Upvotes: 0

Related Questions