You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中使用for循环交换一个数字的首位和末位数字?

Java实现数字首尾位交换(含for循环方案)

嘿,我来帮你搞定这个数字首尾交换的问题!首先咱们先拆解下你现有代码里的小问题,然后再用你想要的for循环方式实现功能。

先说说你现有代码的问题

你写的字符串处理部分有两个关键问题:

  1. String是不可变对象:调用string.replace(first, last)后,原string变量并不会被修改,这个方法会返回一个新的字符串对象,你得把返回值赋值给变量才行。
  2. replace会替换所有匹配字符:如果数字里有多个和首位/末位相同的数字,比如输入12341,replace会把所有匹配的字符都替换掉,而且你先替换首位为末位、再替换末位为首位的操作,会把刚替换好的字符又改回去,完全达不到首尾交换的效果。

用for循环实现纯数字操作的首尾交换

如果想用for循环来处理数字(不转字符串),咱们可以这样做:先通过for循环拿到首位数字和数字的位数,再计算中间部分,最后组合成交换后的数字。代码如下:

import java.util.Scanner;

public class SwapFirstLastDigit {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter a number: ");
        int number = scanner.nextInt();
        scanner.close();

        // 处理单数字的情况
        if (number < 10) {
            System.out.println("Number has only one digit, no swap needed: " + number);
            return;
        }

        int lastDigit = number % 10; // 取末位
        int firstDigit = number;
        int digitCount = 0;

        // 用for循环替代while,获取首位数字并统计位数
        for (; firstDigit > 9; firstDigit /= 10) {
            digitCount++;
        }

        // 计算中间部分:去掉首位和末位后的数字
        int middlePart = (number / 10) % (int) Math.pow(10, digitCount);
        // 组合交换后的数字:末位*10的digitCount次方 + 中间部分*10 + 首位
        int swappedNumber = lastDigit * (int) Math.pow(10, digitCount) + middlePart * 10 + firstDigit;

        System.out.println("Original number: " + number);
        System.out.println("Swapped number: " + swappedNumber);
    }
}

代码解释

  • for循环这里没有初始化语句,直接用条件firstDigit > 9来控制循环,每次把firstDigit除以10,直到它变成个位数,同时统计位数digitCount。
  • middlePart是去掉首位和末位后的数字,比如输入12345,middlePart就是234。
  • 最后通过数学运算把末位放到首位的位置,首位放到末位的位置,中间部分保持不变。

用for循环实现字符串方式的首尾交换

如果你更倾向于用字符串处理,也可以用for循环手动拼接字符来实现首尾交换,避免String不可变的问题:

import java.util.Scanner;

public class SwapFirstLastString {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter a number: ");
        int number = scanner.nextInt();
        scanner.close();

        String numStr = Integer.toString(number);
        int length = numStr.length();

        if (length == 1) {
            System.out.println(numStr);
            return;
        }

        StringBuilder swappedStr = new StringBuilder();
        // 用for循环逐个拼接字符
        for (int i = 0; i < length; i++) {
            if (i == 0) {
                // 第一个位置放末位字符
                swappedStr.append(numStr.charAt(length - 1));
            } else if (i == length - 1) {
                // 最后一个位置放首位字符
                swappedStr.append(numStr.charAt(0));
            } else {
                // 中间字符直接追加
                swappedStr.append(numStr.charAt(i));
            }
        }

        System.out.println("Original number: " + number);
        System.out.println("Swapped number: " + swappedStr.toString());
    }
}

这个for循环会遍历字符串的每个字符,遇到第一个位置就放末位字符,遇到最后一个位置就放首位字符,中间的字符直接保留,这样就精准实现了首尾交换。

内容的提问来源于stack exchange,提问作者Gas-Andrew Chedid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 01:04:04