2016-08-23 5 views
-3

Я хочу, чтобы любое пользовательское целое число вводилось между 1 и 9999 и возвращало это число с измененными цифрами. Проблема с моим кодом заключается в том, что он возвращает сумму введенного целого числа, и я понятия не имею, как это исправить. Это код, который я придумал до сих пор:Обращение с цифрой ввода пользователя с использованием методов

import java.util.Scanner; 
class Reverse{ 
    public static void main(String []args){ 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter a number between 1 and 9999: "); 
     int user = input.nextInt(); 

     if(user>1 && user<9999){ 
      System.out.println("The number with its digits reversed is : " + reverseDigit(user)); 

     }else{ 
      System.out.println("Invalid Input"); 
     } 

    } 

    public static int reverseDigit(int num){ 

     return (num%10 + (num%100)/10 + (num%1000)/100 + num/1000); //This is the problem 

    } 
} 
+2

Почему вы не принимать входные данные в виде строки в обратном, а затем преобразовать его в целое число? – Wickramaranga

+1

Подсказка: 'num% 10 * 1000' переводит последнюю цифру в первую позицию. – Bathsheba

ответ

3

Вы могли бы заменить:

return (num%10 + (num%100)/10 + (num%1000)/100 + num/1000); 

с:

возврата ((NUM% 10) * 1000 + ((NUM% 100)/10) * 100 + ((NUM% 1000)/100) * 10 + num/1000);

Причина, по которой первый был неправ, потому что вы получаете:

last digit:num%10 
third digit:num%100)/10 
second digit:(num%1000)/100 
first digit:num/1000 

так что вы просто добавить все цифры, прежде чем

Но выше работает только для чисел от 1000-9999 .so вы могли бы заменить метод reverseDigit с помощью этого простого метода, который работает для каждого номера:

public static int reverseDigit(int num){ 
     int reverse=0; 
     while(num != 0) 
     { 
      reverse = reverse * 10; 
      reverse = reverse + num%10; 
      num = num/10; 
     } 
     return reverse; 
    } 
+1

Ваше решение работает только с 1000-9999. Попробуйте с 3 или менее цифрами. 23-> 3200 – ArcticLord

+0

спасибо за комментарий, я исправил его !!! – coder

+0

Спасибо, ваше решение сработало. Но я не понимаю здесь логики. По какой причине вы умножили цифры на 1000, 100 и 10? – Vishal

2

Во-первых, преобразовать число в строку, а затем в обратном строку и переконвертировать его в число.

public static int reverseDigit(int num) 
{ 
    String str; 
    str = String.valueOf(num); 
    str = new StringBuilder(str).reverse().toString(); 
    return (Integer.parseInt(str)); 
} 
+0

Мы достигли цели, но логика не подходит – JavaUser

+0

Это действительно работает и очень читаемо и работает для любой длины, поэтому поддерживается. Однако вы должны проверить отрицательные числа. Но это будет не так быстро. Отличное решение будет числовым. – Bathsheba

1

Чтобы сделать это, используя int (хотя String было бы лучше).

public void test() { 
    System.out.println("Reversed: " + 1234 + " = " + reverseDigits(1234, 4)); 
} 

public static int reverseDigits(int num, int digits) { 
    int reversed = 0; 
    for (int i = 0; i < digits; i++) { 
     reversed *= 10; 
     reversed += num % 10; 
     num /= 10; 
    } 
    return reversed; 

} 
2
public static int reverseDigit(int num) { 
    int result = 0; 
    while(num != 0) { 
     result *=10; 
     int temp = num % 10; 
     result += temp; 
     num /=10; 
    } 
    return result ; 
}