注意:我尚未找到此特定问题的答案。
背景故事:
我最近学到了魔术师惯用的油和水程序(这并不意味着我实际上可以做到,但是我已经完成了机制)。对于不熟悉此例程的用户,需要三张红牌和三张黑牌。这些卡最初将红色,黑色,红色,黑色,红色,黑色放在一起。到技巧结束时,所有的红色又回到了一起,所有的黑色又回到了一起。
我已经用Java成功地对此进行了编码,但是对于解释为什么它正确地执行操作我很困惑。我确信我的逻辑存在问题,但是我需要一些验证。
这是我目前拥有的代码:
int[] mixed = {1,2,1,2,1,2};
System.out.println("Before Sort: ");
for (int element : mixed){
System.out.println("Element: " + element);
}
for (int element : mixed){//this for loop moves all but the first and last element.
// for (int element=0;element < mixed.length-1;element++){// this for loop reverses order
int temp = mixed[element];
mixed[element]=mixed[element+1];
mixed[element+1]=temp;
}
if ((mixed[0]==1) && (mixed[5]==2)){//this swaps the first and last elements after using an enhanced for loop
int temp = mixed[0];
mixed[0] = mixed[5];
mixed[5] = temp;
}
System.out.println("After sort: ");
for (int element : mixed){
System.out.println("Element: " + element);
}
确保阅读代码中的注释,因为这是我的wtf时刻所在的位置。我的目标是要让我的高中生能够在打阵列时做到这一点。在介绍数组时,我希望能够对此进行介绍。任何帮助将不胜感激。
最佳答案
您正在使用数组的元素作为所做开关的索引遍历数组。
您只会做两个相同的开关。
当前元素为1时,它将在数组的索引1和索引2处切换值。
当前元素为2时,它将在数组的索引2和索引3处切换值。
这行不通;您必须在最后进行手动切换。并且此手动开关在其他情况下将不起作用。
正确的方法是:
array 1 2 1 2 1 2
index 0 1 2 3 4 5
开关:
0与1
1与3
2 5
只有3个开关,因此循环应从0开始,以数组长度/ 2结束。