我一直在尝试这个程序一段时间,但却无法找到合适的解决方案。例如,输入为123456
,由用户输入。我想交换前两个字符,然后是接下来的两个字符,依此类推。因此,输出应为214365
。我尝试了以下代码但无法获得所需的输出。
public static void main(String[] arg$) {
Scanner in = new Scanner(System.in);
System.out.println("enter a word: ");
String str = in.nextLine();
char[] arr = str.toLowerCase().toCharArray();
char temp1, temp2;
for (int i = 0; i < arr.length; i++) {
try {
if ((i % 2) == 0) {
temp2 = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp2;
} else {
System.out.println(Arrays.toString(arr));
temp1 = arr[i + 1];
arr[i + 1] = arr[i+2];
arr[i + 2] = temp1;
}
} catch (Exception e) {
}
}
System.out.println("The final String is : =\n\n");
for (int j = 0; j < arr.length; j++) {
System.out.println(arr[j]);
}
}
示例输入:
123456
示例输出:
213456
答案 0 :(得分:5)
你用第二个字符交换第一个字符,然后用第三个字符交换第二个字符,依此类推。这不是你应该做的。
对于n个字符的字符串,最多应该有n / 2个交换(如果n是奇数,则交换的数量将小于n / 2)。
for (int i = 0; i < arr.length; i+=2) {
if (i + 1 < arr.length) {
temp2 = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp2;
}
}
答案 1 :(得分:1)
看起来你想交换其他所有角色,我会先用StringBuilder
和一个方法在给定位置交换任意两个角色。像,
static void swap(StringBuilder sb, int a, int b) {
if (a != b && a < sb.length() && b < sb.length()) {
char ch = sb.charAt(a);
sb.setCharAt(a, sb.charAt(b));
sb.setCharAt(b, ch);
}
}
然后你可以在一个简单的for
循环中调用它。像,
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("enter a word: ");
StringBuilder sb = new StringBuilder(in.nextLine());
for (int i = 0; i < sb.length(); i += 2) {
swap(sb, i, i + 1);
}
System.out.println(sb.toString());
}
我使用您提供的输入运行了(并获得了预期的输出)。具体地,
enter a word:
123456
214365