(Java)检查2d数组的2个元素是否与其他元素对相同。如果是这样,用另一对原始替换该对

时间:2017-11-21 03:48:36

标签: java arrays

我的问题在于方法的检查器部分的逻辑和输出。

程序运行drawCard()5次并创建“hand”后,它会通过检查程序以确保没有副本。如果有任何副本,它“绘制一张新卡”并替换匹配的副本。

然而,每次我运行该程序时,都会运行程序,检查器部分标记并替换每个“卡”,无论它是原始卡还是副本。

此外,在修复逻辑药水后,确保新“卡片”与现有卡片不匹配的最简单方法是什么。

另外:每张“卡”都是1d数组。种类用1-13表示,套装为0-3

public static int[][] drawHand(){

    int[][] hand = new int[5][2];

    //CALLS drawCard 5 TIMES AND FILLS THE 5 SLOTS WITH "CARDS" CREATES A "HAND"
    for(int i=0; i<5;i++) {

        int[] x = drawCard();
        hand[i][0]=x[0];
        hand[i][1]=x[1];
    }
    //PRINTS OUT HAND BEFORE IT GOES THROUGH THE CHECKER
    System.out.println("BEFORE");
    for(int i=0;i<5;i++) {
        System.out.println(hand[i][0]+" "+ hand[i][1]);
    }
    //CHECKER
    for(int h=0;h<hand.length;h++) {
        for(int f=4;f>=0;f--) {

            if(hand[h][0]==hand[f][0]&&hand[h][1]==hand[f][1]){
                int[] x = drawCard();
                hand[h][0]=x[0];
                hand[h][1]=x[1];
            }
        }
    }

    System.out.println("AFTER");
    for(int j=0;j<5;j++) {
        System.out.println(hand[j][0]+" "+ hand[j][1]);
    }
    return hand;
}

1 个答案:

答案 0 :(得分:0)

你的双循环最终会检查

  • 卡0对卡0,
  • 卡1对卡1,
  • 卡2对卡2,
  • 卡3对卡3,
  • 卡4对卡4,

当然,这些将始终匹配,并且将为每个卡绘制一张新卡。您可以通过在测试中添加f !=h来阻止这种情况,例如:

if(f!=h && hand[h][0]==hand[f][0]&&hand[h][1]==hand[f][1]){

要重新检查抽出的卡片,请添加do {…} while(redraw_made);循环。每次循环时,将redraw_made设置为false,如果重新绘制卡片,请将其设置为true,以便再次执行检查。