从字符串数组索引中获取数字,并将它们相乘?

时间:2018-06-22 01:11:18

标签: java

因此,在这种情况下,我在一个纸牌中有一个包含多个卡的阵列。这些卡在每个索引中的排名分别为S1R1,S1R2,S1R3,S2R1,S2R2,S2R3。我需要能够从每个索引位置提取两个数字并将它们相乘,最后将它们相加。

For example, 
position 0 would be 1 * 1 = 1
position 1 would be 1 * 2 = 2
position 2 would be 1 * 3 = 3
etc. etc.

此示例的代码根据用户输入而变化,因此很难为您提供使用的代码。

public void createDeckofCards() {
    SizeOfDeck = NumberOfRanks * NumberOfSuits;

    Cards newCard = new Cards();

    newCard.setCards ( NumberOfRanks, NumberOfSuits );

    newDeck = new String [ SizeOfDeck ];


    int counter = 0;
    for (int whatSuit = 1; whatSuit <= NumberOfSuits; whatSuit++) {
        for (int rank = 1; rank <= NumberOfRanks; rank++) {
            newDeck[counter++] = newCard.createCard(rank, whatSuit);
        }
    } 
}

这就是调用方法createCard()的方法,该方法根据用户输入的卡数来创建每张卡。因此,newDeck []包含所有这些卡,我需要将其分解为数字并最终进行总结。 (制作10万张纸牌的直方图)

感谢您的宝贵时间,感谢您的投入

2 个答案:

答案 0 :(得分:1)

使您的卡片成为具有西装和等级属性的对象(也许Card)。 给它返回的方法:

  • 符号形式(toString是合乎逻辑的选择):return "S" + suit + "R" + rank;
  • 一种值形式(getValue()):return suit * rank;

这样,您可以创建Card的数组而不是String的数组。

如果需要将符号表示形式(“ S1R7”,“ S3R9”)转换为物理对象的能力,请创建Map<String, Card>。您可以用map.put(card.toString(), card);填充它。

要查找卡片,您只需Card card = map.get("S1R2"); 然后该值可作为card.getValue()

答案 1 :(得分:1)

您可以使用正则表达式

^S([\\d]+)R([\\d]+)$

代码段:

String s ="S3R4";
Pattern pattern = Pattern.compile("^S([\\d]+)R([\\d]+)$");
Matcher matcher = pattern.matcher(s);
if(matcher.find()){
System.out.println((Integer.parseInt(matcher.group(1))*Integer.parseInt(matcher.group(2))));
}

输出:

12

enter image description here