如何在Java中使用for循环交换一个数字的首位和末位数字?
Java实现数字首尾位交换(含for循环方案)
嘿,我来帮你搞定这个数字首尾交换的问题!首先咱们先拆解下你现有代码里的小问题,然后再用你想要的for循环方式实现功能。
先说说你现有代码的问题
你写的字符串处理部分有两个关键问题:
- String是不可变对象:调用
string.replace(first, last)后,原string变量并不会被修改,这个方法会返回一个新的字符串对象,你得把返回值赋值给变量才行。 - 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
相关产品推荐
相关产品推荐

