5 回答
TA贡献1831条经验 获得超10个赞
尝试使用一套。一个元素只能包含在集合中一次,因此如果数组中有重复的数字,contains()则会返回。true
public static void findPairs(int[] numbers) {
Set<Integer> set = new HashSet<>();
for (int number: numbers) {
if (!set.add(number)) {
System.out.println("PAIR: " + number);
}
}
}
请记住,如果您的数组包含超过 2 个相同数字的重复项,则这将打印PAIR: n多次 - 它不会在列表中找到给定数字的多个重复项。
在这种情况下,您可能需要考虑删除该号码并跟踪您已经捕获的对。
TA贡献1789条经验 获得超8个赞
TA贡献1828条经验 获得超4个赞
您可以使用一个数组,其中位置+1是卡片的编号,例如:
5 5 10 11 7
[0, 0, 0, 0, 2, ... , 1, 0, 0, 1, 1,...]
TA贡献1858条经验 获得超8个赞
用户输入是如何存储的。例如,将其存储为数组,然后将按要求输出以下内容。
public static void main(String[] args) {
int[] nums = new int[]{12,11,5,2,12};
System.out.println(isPair(nums));
}
private static String isPair(int[] nums){
Set<Integer> set = new HashSet<>();
for(int n : nums){
if(set.contains(n)){
return "PAIR";
}else{
set.add(n);
}
}
return null;
}
TA贡献1824条经验 获得超5个赞
正如其他答案所指出的,使用 Set 可以很容易地找到重复项,但无法区分一对、三条和四边形之间的区别,或者两对和葫芦之间的区别。它也无助于找到剩下的扑克牌。
更好的方法是简单地对用于表示卡片的数字数组进行排序,然后迭代排序的列表,查找对和三元组(现在将是相邻的)。这也将帮助您寻找顺子,并有助于在相似牌之间进行排名。
另外,通常最好从上到下寻找手牌:即,检查同花顺,然后四边形,然后葫芦,然后同花......一直到一对和没有对。
添加回答
举报