我正在尝试根据偶数和奇数索引交换int数组中的数字。 至今, 我能够弄清楚如何定位偶数和奇数索引,但是, 然后由于嵌套的for循环,我无法将所有元素打印在一个数组中。 这是我的代码-
public class SwapIndexes {
public static void main(String []args) {
int temp;
int[] arr = {1, 2, 3, 4, 5, 6};
for (int j = 0; j < arr.length; j += 2) {
for (int k = 1; k < arr.length; k += 2) {
temp = arr[j];
arr[j] = arr[k];
arr[k] = temp;
System.out.print(arr[k]);
}
}
}
}
此代码将124312531
作为arr[k]
的输出,并将246124312
作为arr[j]
的输出。我希望输出为
2,1,4,3,6,5
答案 0 :(得分:4)
我真的不明白为什么会有两个循环。您只需要一个,因为只需要浏览一次阵列。这是一个循环的代码:j
将具有所有奇数索引,然后切换j-1
和j
。
由于没有给出有关具有奇数个元素的数组的行为的规范,因此在这种情况下,它不会修改最后一个值。如果需要,可以引发异常。
public static void main(String []args) {
int temp;
int[] arr = {1, 2, 3, 4, 5, 6};
for (int j = 1; j < arr.length; j += 2) {
temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
System.out.print(Arrays.toString(arr));
}
答案 1 :(得分:0)
好吧,我不知道你为什么要使用两次循环,因为这个想法就在那里。
删除第二个循环,将k
设置为j + 1
,逻辑就在这里(注释了不需要的代码。
for (int j = 0; j < arr.length; j += 2) {
//for (int k = 1; k < arr.length; k += 2) {
int k = j + 1;
temp = arr[j];
arr[j] = arr[k];
arr[k] = temp;
//System.out.print(arr[k]);
//}
}
System.out.print(Arrays.toString(arr));
现在,您需要防止由于长度不均匀而导致异常。 我喜欢简单地使用稍微不同的循环:
for (int j = 1; j < arr.length; j += 2) {
int k = j - 1;
...
}
System.out.print(Arrays.toString(arr));
所有您需要做的就是检查是否至少有2个单元格,如果您要反转这样的数组,这很有意义
if(arr.length < 2)
return;
测试1:
{1、2、3、4、5、6}
[2,1,4,3,6,5]
测试2:
{1、2、3、4、5、6、7}
[2,1,4,3,6,5,7]