【问题标题】:Reversing a user input digit using methods使用方法反转用户输入数字
【发布时间】:2016-08-23 12:46:01
【问题描述】:

我想获取 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

    }
}

【问题讨论】:

  • 为什么不把输入当成字符串,反转后再转成整数呢?
  • 提示:num % 10 * 1000 将最后一位移动到第一位。

标签: java methods user-input reverse digit


【解决方案1】:

你可以替换:

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 的数字。因此您可以将 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;
    }

【讨论】:

  • 您的解决方案仅适用于 1000-9999。尝试使用 3 位或更少的数字。 23->3200
  • 谢谢,您的解决方案有效。但我不明白这里的逻辑。您将数字乘以 1000、100 和 10 的原因是什么?
  • 因为例如数字 9875,您需要使用数字 9,8,7,5 并返回 5+7+8+9 =29 但您需要返回:5000+700+80+ 9=5789 这是你想要的数字,所以这就是为什么你需要在返回数字之前乘以。你乘以构造正确的数字!!
  • 哦,好吧,我现在明白其中的逻辑了。非常感谢您的帮助:)
  • 我很抱歉@coder。我不知道有这样的功能。我已经编辑了我的帖子并勾选了你的答案正确。非常感谢您的帮助。
【解决方案2】:

首先将数字转换成字符串,然后将字符串反转并重新转换成数字。

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

【讨论】:

  • 我们实现了目标,但逻辑不合适
  • 这确实有效,可读性强,适用于任何数字长度,因此受到好评。不过,您应该检查负数。但这不会很快。一个很好的解决方案将是数字。
【解决方案3】:
public static int reverseDigit(int num) {
    int result = 0;
    while(num != 0 ) {
        result *=10;
        int temp = num % 10;
        result += temp;
        num /=10;
    }
    return result ;
}

【讨论】:

    【解决方案4】:

    使用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;
    
    }
    

    【讨论】:

      猜你喜欢
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多