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)
- 如果 H1 > H2 return 1
- 如果 H1 < H2 return -1
- 如果等于return0
我确实做了以下代码(不起作用):
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
请注意,我已经颠倒了两个参数以首先获得较高的值。
我最近开始学习 Java 是为了好玩,但遇到了以下问题: 我有 2 个数组 int[],其中包含扑克手的表示。 数组中的位置 0 表示它是否是同花顺,其中的数字表示大牌的值。数组中的位置 1 告诉它是否是一种类型和卡片的价值,所以这里的 5 意味着你在 5:s 中有 fourofakind 等等。
所以我想比较所有玩家数组的第一个位置 0(对于同花顺),并且拥有最高数字的玩家获胜。如果所有玩家都有 0 或 2 个或更多玩家具有相同的数字,则进入数组中的位置 1并进行比较等等。
为了简化代码,我尝试做一个比较函数,比较 2 个玩家的手和 returns 如果手 1(在代码数组 1 中)高于手 2(数组 2)
- 如果 H1 > H2 return 1
- 如果 H1 < H2 return -1
- 如果等于return0
我确实做了以下代码(不起作用):
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
请注意,我已经颠倒了两个参数以首先获得较高的值。