复制手中的诡计油和水

时间:2017-08-29 22:33:40

标签: java arrays sorting

注意:我没有找到这个特定问题的答案。

背景故事:

我最近学会了魔术师在手中使用的油和水的例行程序(这并不意味着我实际上可以做到这一点,但我已经完成了机制)。对于那些不熟悉这个例程的人来说,需要三张红牌和三张黑牌。这些卡最初放在一起,红色,黑色,红色,黑色,红色,黑色。在技​​巧结束时,所有的红色都重新组合在一起,所有的黑色都重新组合在一起。

我已经用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 个答案:

答案 0 :(得分:1)

您正在使用数组元素作为所做开关的索引来迭代数组。

你只做过两个相同的开关。

  1. 当前元素为1时,它会切换数组的索引1和索引2处的值。
  2. 当前元素为2时,它会切换数组的索引2和索引3处的值。
  3. 这不起作用;你必须在最后做一个手动开关。此手动开关在其他情况下不起作用。

    正确的方法是:

    array 1 2 1 2 1 2
    index 0 1 2 3 4 5
    

    开关:

    1. 0 with 1
    2. 1 with 3
    3. 2 with 5
    4. 只有3个开关,因此循环应从0开始,以数组长度/ 2结束。