骰子游戏中的三种

时间:2018-02-09 18:04:38

标签: java list

我正在努力创建一种方法,用于计算我是否得到三种滚动总共5个骰子。我已经创建了一些你可以在下面看到的东西,但它似乎没有正确的工作方式。整个目标是看你是否已经滚动了3个相同的数字然后如果有,将该数字乘以10并将其加到你的分数上。例如,如果您滚动5,5,5,1,2,则会为总分增加50。

我的想法是创建一个ArrayList并解析每个dierolled数并将其添加到新的ArrayList,同时检查重复项和使用计数器。

这是我提出的,但正如我所说,它并没有真正成功。如果有人看到我如何改善这一点或正确地做到这一点,请不要犹豫,加入!

注意:假设dierolled是存储5个骰子的地方,而updateTotalScore是一种在分数类中更新分数的方法。

public void rule2b(ArrayList<Integer> dierolled){
  ArrayList<Integer> numbers = new ArrayList<Integer>();
  int counter = 0;

  for (int i = 0; i < dierolled.size(); i++){
     int b = dierolled.get(i);
     if (numbers.contains(b)){
        counter++;
     }
     numbers.add(b);
     if (counter == 3){
        score.updateTotalScore(b*10);
     }
  }
}

3 个答案:

答案 0 :(得分:1)

我会对列表进行流式处理,计算每个元素的出现次数,并检查它们是否出现过三次以上:

{{1}}

答案 1 :(得分:0)

我更喜欢Mureinik @的回答。但如果你还没有意识到java8的功能,这里有一个没有stream和lambdas的简单解决方案

Map<Integer, Integer> count = new HashMap<>();
for (int i = 0; i < list.size(); i++) {
    int element = list.get(i);
    if (count.get(element) == null) {
        count.put(element, 1);
    } else {
        count.put(element, count.get(element) + 1);
    }
}

for (Map.Entry<Integer, Integer> entry : count.entrySet()) {
    if (entry.getValue() >= 3) {
        System.out.println(entry.getKey());
        //If there will be only one element with occurrence more than 3, you can break here.
    }
}

编辑:OP的另一个版本只想使用一个ArrayList。

Collections.sort(list); //Sort the list - O(nlogn)

int element = list.get(0); //Beware of IndexOutOfBoundsException - I assume empty list at the start of the method
int counter = 1; //To count number of times element has occurred

for(int i = 1; i < list.size(); i++) {
    int currentElement = list.get(i);
    if (element == currentElement) {
        counter++; //Previous and current element are same
    } else {
        counter = 1; //We have seen a new number
    }
    if (counter == 3) {
        System.out.println(element); //Printing the element that has occurred 3 times
        //score.updateTotalScore(element * 10);
    }
    element = currentElement;
}

答案 2 :(得分:0)

另一种解决方案:

int[] dice = new int[6];
for (int i=0; i<list.size(); i++) {
    int num = list.get(i);
    dice[num-1]++;
    if(dice[num-1] == 3) {
        score.updateTotal(num*10);
    }
}