为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查单行输入中是否有两个相同的数字

如何检查单行输入中是否有两个相同的数字

素胚勾勒不出你 2023-10-19 21:12:31
我正在使用 eclipse 在 java 中制作扑克游戏,我需要帮助创建代码来查找单行输入的 PAIR。如果用户输入:12,11,5,2,12那么我如何识别输入是否有两个相同的数字,然后将其打印为一对。所以基本上我已经接受了一个字符串输入,然后使用 split 函数将其转换为 String 数组以识别数字,然后将其转换为 Int 数组。当用户输入:12,3,4,5,12-- 它应该在输出中打印:PAIR
查看完整描述

5 回答

?
慕哥6287543

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多次 - 它不会在列表中找到给定数字的多个重复项。


在这种情况下,您可能需要考虑删除该号码并跟踪您已经捕获的对。


查看完整回答
反对 回复 2023-10-19
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

只需使用一个集合,然后添加元素即可。如果 add 返回 false,则存在欺骗,您可以执行任何您想要的逻辑。

Set<String> cards = new HashSet<>();

if (!cards.add(something))  {

    // match of two cards found

}

如果您需要它是数字,请使用 Integer,而不是 int,因为后者是基元而不是 obj。


查看完整回答
反对 回复 2023-10-19
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

您可以使用一个数组,其中位置+1是卡片的编号,例如:

5 5 10 11 7

[0, 0, 0, 0, 2, ... , 1, 0, 0, 1, 1,...]


查看完整回答
反对 回复 2023-10-19
?
猛跑小猪

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;

}


查看完整回答
反对 回复 2023-10-19
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

正如其他答案所指出的,使用 Set 可以很容易地找到重复项,但无法区分一对、三条和四边形之间的区别,或者两对和葫芦之间的区别。它也无助于找到剩下的扑克牌。

更好的方法是简单地对用于表示卡片的数字数组进行排序,然后迭代排序的列表,查找对和三元组(现在将是相邻的)。这也将帮助您寻找顺子,并有助于在相似牌之间进行排名。

另外,通常最好从上到下寻找手牌:即,检查同花顺,然后四边形,然后葫芦,然后同花......一直到一对和没有对。


查看完整回答
反对 回复 2023-10-19
  • 5 回答
  • 0 关注
  • 162 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信