我需要创建一个使用数组的程序,这些数组可以将一个平台重新排序。我应该将原来的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]我仍然有这个问题。
答案 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