[英]How do I swap the places of an int in java?
我需要交换一个 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;
}
这是解决方案(已测试):
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;
}
这里的关键点是:
%
with 10(即number % 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));
}
输出:
845269
1325476
21
1
0
如果你有abcdef
然后((a+b)*10000 + (c+d)*100 + (e+f)) * 11 - abcdef = badcfe
一个简单的解决方案是
int i1 = 482596;
char[] a = String.valueOf(i1).toCharArray();
for (int i = 0; i < a.length - 1; i += 2) {
char tmp = a[i];
a[i] = a[i + 1];
a[i + 1] = tmp;
}
int i2 = Integer.parseInt(new String(a));
这是带有一些测试用例的代码
public class ReverseNumberDigit {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(reverseNumber(123456789));
System.out.println(reverseNumber(12345678));
System.out.println(reverseNumber(1234567));
System.out.println(reverseNumber(123456));
System.out.println(reverseNumber(12345));
System.out.println(reverseNumber(1234));
System.out.println(reverseNumber(123));
System.out.println(reverseNumber(12));
System.out.println(reverseNumber(1));
}
private static int reverseNumber(int orinalNumber) {
int reverseNumber = 0;
int x = 1;
while(orinalNumber > 9){
int lastNumber = orinalNumber % 10;
orinalNumber = orinalNumber / 10;
int secondNumber = orinalNumber % 10;
orinalNumber = orinalNumber / 10;
reverseNumber = reverseNumber + (lastNumber * x * 10) + (secondNumber * x);
x = x * 100;
}
if(orinalNumber > 0){
reverseNumber = reverseNumber + orinalNumber * x;
}
return reverseNumber;
}
}
我是 Java 新手,但这可能是另一种解决方案;
import java.util.Scanner;
public class DigitsPlaceSwap {
public static void main(String[] args) {
DigitsPlaceSwap demo = new DigitsPlaceSwap();
System.out.print("Enter a whole number : ");
Scanner stdin = new Scanner(System.in);
int number = stdin.nextInt();
demo.switchDigits( number );
}
public void switchDigits( int number ) {
int getDigits = 0;
int numberOfDigits = String.valueOf(number).length();
String result = "";
for( int i = 1; i <= numberOfDigits; i++) {
getDigits = ( ( number % (int) Math.pow( 10, i ) ) / (int) Math.pow( 10, i - 1 ) );
result += Integer.toString( getDigits );
}
System.out.println( "Swapped Number is : " + result );
}
}
它不会验证输入是否为范围内的正整数。 我将其转换为 String 以使其在交换后在左侧打印零。
Enter a whole number : 342325400
Swapped Number is : 004523243
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.