如何在java中交换int的位置?

use*_*654 2 java algorithm

我需要交换int的位置.例如,如果我调用方法swapDigitPairs(482596),它将返回845269. 9和6交换,2和5以及4和8交换.

如果数字包含奇数个数字,请将最左边的数字保留在原始位置.例如,swapDigitPairs(1234567)的调用将返回1325476.我不打算使用字符串解决,我应该使用while循环来解决它.我不应该使用任何数组.

以下是我到目前为止所做的工作.但我被困在交换位置,我知道我需要乘以地方(如第十,千等)取决于数量.但我被困在这一部分.我所做的是逐个检索数字.

public static int swapDigitPairs(int number) {

    while(number!=0) {
        int firstDigit = number%10;

        for(int i =10;i<=;i*=10) {
            int secondDigit= firstDigit*i;
        }

        int leftOverDigit = number/10;

        number=leftOverDigit;

    }
    return number;
}
Run Code Online (Sandbox Code Playgroud)

Boh*_*ian 6

这是解决方案(已测试):

public static int swapDigitPairs(int number) {
    int result = 0;
    int place = 1;
    while (number > 9) {
        result += place * 10 * (number % 10);
        number /= 10;
        result += place * (number % 10);
        number /= 10;
        place *= 100;
    }
    return result + place * number;
}
Run Code Online (Sandbox Code Playgroud)

这里的关键点是:

  • 循环消耗数字右侧的数字,因此优雅地处理奇数/偶数处理区别
  • 终止条件是剩余至少两位数
  • 循环逻辑每次迭代处理两位数
  • 使用余数运算符%10(即number % 10)生成最后一位数
  • 整数除以10以数字方式截断最后一位数
  • 没有必要保留变量中的最后一位数 - 它只会使代码混乱

这是一些测试和一些边缘情况:

public static void main(String[] args) throws Exception {
    System.out.println(swapDigitPairs(482596));
    System.out.println(swapDigitPairs(1234567));
    System.out.println(swapDigitPairs(12));
    System.out.println(swapDigitPairs(1));
    System.out.println(swapDigitPairs(0));
}
Run Code Online (Sandbox Code Playgroud)

输出:

845269
1325476
21
1
0
Run Code Online (Sandbox Code Playgroud)