计算数组中的重复值

时间:2015-03-05 16:03:24

标签: java arrays count

我正在创造一个游戏,玩家掷骰子五次。结果记录在一个数组中。

private final int diceRolls = 5;
private int[] results = new int[diceRolls];

private void game() {
    Random randomNumber = new Random();
    for(int i=0; i<diceRolls; i++) {
        results[i] = randomNumber.nextInt(6) + 1;
    }
    Arrays.sort(results);
}

我正在实施一个评分系统,这样如果一个玩家掷出3个相同的数字,他就会得到10分(即1,1,1,4,5)。如果他掷出一个数字中的3个而另一个数字中的2个则得到15分。 (即1,1,1,2,2)我该怎么做?

3 个答案:

答案 0 :(得分:2)

这种方法可以解决这个问题,它是Exbury指出的第一个解决方案,但第二个解决方案更为优化。

private void game() {
    Random randomNumber = new Random();
    for(int i=0; i<diceRolls; i++) {
        results[i] = randomNumber.nextInt(6) + 1;
    }
    Arrays.sort(results);
}

private int scoreCalc(int [] results)
{
  int score=0;
  for(int i = 0; i < 7; i++)
  {
    int repeated=0;
    for(int j = 0; j < results.length; j++)
    {
      if(results[j] == i)
      {
        repeated++;
      }
    }
    score += countPoints(repeated);
  }
}
private int countPoints(int repetitions){
//here goes the scoring system
}

答案 1 :(得分:1)

  • 骰子只有6个数字,你可以做的就是搜索每个数字并做出决定。

直接搜索

for(int i=0;i<6;i++){
   int count=0;
   for(int j=0;j<dicecount;j++){
       //check each array element with i+1

   }
}
  • 维护Java Map数据结构以使用计数值
  • 映射每个数字

地图实施

HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(key, map.get(key) + 1);

答案 2 :(得分:0)

此代码验证数字是否与先例相同。在对数组结果进行排序后,它会跟随您的代码。

int count1 = 1;
int count2 = 1;
boolean sameThanBefore= false;

for (int = 1; i < diceRolls; i++) {
    if (results[i] == results[i-1]) {
        if (sameThanBefore && count1 < 2) {
            count1++;
            sameThanBefore = true;
        } else if (sameThanBefore) {
            count2++;
            sameThanBefore = true;
        }
    } else
        sameThanBefore = false;
}

if ((count1 == 3 && count2 == 2) || (count1 == 2 && count2 == 3))
    score = 15;
else if (count1 == 3 || count2 == 3)
    score = 10;