使用数组的Java完美shuffle

时间:2013-11-15 22:17:50

标签: java arrays shuffle

我需要创建一个使用数组的程序,这些数组可以将一个平台重新排序。我应该将原来的52层甲板切成两半,然后通过交替地从任何一堆堆放卡片将卡片放入新的堆中。原订单1,2,3,4 .... 49,50,51,52应按1,27,2,28,3 ...... 26,52的顺序出现。

 public static void main(String[] args)
  {
    int[] array = new int[52];
    int[] top = new int[26];
    int[] bottom = new int[26];

    for(int i=0; i < 52; i++)
    {
      array[i] = i+1;
    }
    for(int i = 0; i < 26; i++)
    {
      top[i] = array[i];
    }
    for(int i = 0; i < 26; i++)
    {
     bottom[i] = array[i+26];
    }

    System.out.println(shuffle(array, top, bottom));
  }

  public static int[] shuffle(int[] array, int[] top, int[] bottom)
  {
    for(int j = 0; j < top.length; j--)
    {
      array[j*2] = top[j];
      array[j*2-1] = bottom[j];
    }
    return array;
  }

我的问题是我有一个超出范围的例外。我不知道如何解决这个问题。即使我做数组[j * 2 + 1]我仍然有这个问题。

3 个答案:

答案 0 :(得分:6)

for(int j = 0; j < top.length; j--)

从0开始,然后递减j。所以第二次迭代将尝试访问索引-1。 事实上,即使是第一个,因为它试图访问索引j*2-1,当j为0时为-1。

答案 1 :(得分:2)

将shuffle改为:

    public static int[] shuffle(int[] array, int[] top, int[] bottom)
      {
        for(int j = 0; j < top.length; j++)
        {
          array[j*2] = top[j];
          array[j*2+1] = bottom[j];
        }
        return array;
      }

    public static String print(int[] array)
  {
String result="";
    for(int j = 0; j < array.length; j++)
    {
      result=result+top[j];
    }
    return result;
  }

这样称呼:

System.out.println(print(shuffle(array, top, bottom)));

答案 2 :(得分:0)

在第一次迭代时,当j = 0时,数组[j * 2-1]变为数组[-1]并导致异常。无论如何整个逻辑是不正确的,没有理由减少j