Java 用于比较数组位置的函数?

Java function for comparing Arrays position for position?

我最近开始学习 Java 是为了好玩,但遇到了以下问题: 我有 2 个数组 int[],其中包含扑克手的表示。 数组中的位置 0 表示它是否是同花顺,其中的数字表示大牌的值。数组中的位置 1 告诉它是否是一种类型和卡片的价值,所以这里的 5 意味着你在 5:s 中有 fourofakind 等等。

所以我想比较所有玩家数组的第一个位置 0(对于同花顺),并且拥有最高数字的玩家获胜。如果所有玩家都有 0 或 2 个或更多玩家具有相同的数字,则进入数组中的位置 1并进行比较等等。

为了简化代码,我尝试做一个比较函数,比较 2 个玩家的手和 returns 如果手 1(在代码数组 1 中)高于手 2(数组 2)

我确实做了以下代码(不起作用):

int isBetterHand(int[] array1, int[]array2){ //private
    if(array1.length > array2.length){ throw new RuntimeException("arrayCompare got arrays of different length.");}
    int arrayLength = array1.length;
    for(int i = 0; i < arrayLength; i++){
        if(array1[i] > array2[i]){
            return 1;
        } else if(array1[i] < array2[i]){
            return -1;
        } else {
            return 0;
        }
    }
    return 0;
}

我在 Java 中计算你不能写 if array1[0](比较器如 <、>、==)array2[0]

如何修复上面的代码?是否还有更快、更好、更智能的方法来做到这一点?数组的长度为 26 个数字。我需要共同比较最多 8 个数组。

假设我在游戏中还剩下 5 个玩家,我可以得到一个矩阵(我只输入前 5 个位置:

P1 0, 0, 0, 0, 0, ... P2 0, 0, 0, 0, 0, ... P3 0, 2, 0, 0, 0, ... P4 0, 0, 13, 3, 0, ... P5 0, 0, 0, 0, 14, ...

在上面的 ex 中,pos[0] 表示同花顺中的高牌没有人有 在 pos[1] 中它显示 P3 是赢家,在 2:s 中有四个 ((pos[2]&[3] 显示 P4 的满堂 K 超过 3(但 P3 4 更好...)))

编辑:哇!没想到回答这么快。现在它的工作就像一个魅力。 一个大的!感谢所有帮助过我的人。

我必须更深入地了解比较数组矩阵的建议,但你们在那里为我指出了正确的方向。

看来你的想法基本上是对的。唯一的问题是循环中 0 的早期 return。当你循环时,如果相应的数组元素不相等,你应该只 return 1-1 。只有当你用尽整个数组后,你才能得出它们相等的结论,并且 return 0:

for (int i = 0; i < arrayLength; i++) {
    if (array1[i] > array2[i]) {
        return 1;
    } else if (array1[i] < array2[i]) {
        return -1;
    }
    // else claus removed here
}
return 0;

编辑:
正如 Andy Turner 在评论中提到的,您还应该检查两个数组的长度是否完全相同,而不仅仅是第一个不长于第二个。把这些放在一起:

int isBetterHand(int[] array1, int[]array2) {
    i f(array1.length != array2.length) {
        // Use != ----^
        throw new RuntimeException("isBetterHandgot arrays of different length.");
    }
    int arrayLength = array1.length;
    for (int i = 0; i < arrayLength; i++) {
        if (array1[i] > array2[i]) {
            return 1;
        } else if (array1[i] < array2[i]) {
            return -1;
        } 
        // else clause removed here
    }
    return 0;
}

此功能是自 Java 9:

以来内置的
    return Arrays.compare(array2, array1); // Reverse args to get higher value first

请注意,我已经颠倒了两个参数以首先获得较高的值。