如何继续在数组上提供方法,直到与其他数组相等

时间:2019-05-23 08:02:23

标签: java arrays int equals

我有一个int1 [k]数组,其值等于它的索引{0,1,2,3...}

我还有一个method1,该方法接受该数组并返回另一个int2 [k],其值以这种方式洗牌:

初始卡片组:0 1 2 3 4 5 6 7

随机播放的副牌:4 0 5 1 6 2 7 3

最后,我有一个method2,它可以接受任何int [k]数组,并在其上计算要使其返回原始状态所需的method1随机播放:

Shuffles    Deck Order  
    0       0, 1, 2, 3, 4, 5, 6, 7  
    1       4, 0, 5, 1, 6, 2, 7, 3  
    2       6, 4, 2, 0, 7, 5, 3, 1  
    3       7, 6, 5, 4, 3, 2, 1, 0  
    4       3, 7, 2, 6, 1, 5, 0, 4   
    5       1, 3, 5, 7, 0, 2, 4, 6  
    6       0, 1, 2, 3, 4, 5, 6, 7 

6次。

在该最终方法中,我想运行do{}while()循环,条件为“直到新数组不等于原始数组本身”,尽管System.out.printing显示数组在每次迭代中都在变化(并且等于原始状态)条件平等永远不会成真。

public class PerfectShuffle {
private int[] deck;
public PerfectShuffle(int size) {
        this.deck = new int[size];
        for (int i = 0; i < size; i++) {
            this.deck[i] = i;
        }
    }

public int[] method1(int[] input) {
        int[] newDeck = new int[input.length];
        int[] input1 = new int[input.length/2];
        int[] input2 = new int[input.length/2];
        System.arraycopy(input, 0, input1, 0, input.length/2);
        System.arraycopy(input, input.length/2 - 1, input2, 0, input.length/2);
        for (int i = 0; i < input.length/2; i++){
            newDeck[i*2 + 1] = input1[i];
            newDeck[i*2] = input2[i];
        }
        return newDeck;
    }

 public int method2() {
        int[] tempDeck = this.deck;
        int count = 0;
        do {
            tempDeck = this.method1(tempDeck);
            count++;
            System.out.println(Arrays.toString(tempDeck));
        } while (!Arrays.equals(tempDeck, this.deck));
        return count;
    }
}
public class Main {

    public static void main(String[] args) {
        PerfectShuffle s = new PerfectShuffle(52);
        System.out.println( s.method2() );
    }
}

我期望有一个数字,但是将其简单地“思考”了很长时间。

1 个答案:

答案 0 :(得分:3)

此行是错误的:System.arraycopy(input, input.length/2 - 1, input2, 0, input.length/2);。它有一个错误的错误。

源数组起始索引应为input.length/2