注意:我尚未找到此特定问题的答案。

背景故事:

我最近学到了魔术师惯用的油和水程序(这并不意味着我实际上可以做到,但是我已经完成了机制)。对于不熟悉此例程的用户,需要三张红牌和三张黑牌。这些卡最初将红色,黑色,红色,黑色,红色,黑色放在一起。到技巧结束时,所有的红色又回到了一起,所有的黑色又回到了一起。

我已经用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结束。

10-08 14:53