Java骰子游戏中的得分问题?

Java骰子游戏中的得分问题?,java,logic,nested-loops,Java,Logic,Nested Loops,在我的计算机科学课上,我们制作了一个骰子游戏,你可以掷5个骰子,每次最多3次,目标是获得尽可能多的匹配骰子。点数用2^(n-1)计算,其中n是匹配的骰子数。e、 如果你的骰子是2,3,3,4,4,你将得到2^1+2^1分,或4分。如果所有5个骰子都匹配,你会得到16分(2^(5-1)),如果你有3,3,2,3,2,你会得到6分(我花了一段时间才弄清楚分数是如何计算的,这就是为什么我要举这么多例子)。所以我对游戏的机制没有任何问题,我这样做是为了让你可以掷骰子3次等等,但是我真的很难在最后统计分数

在我的计算机科学课上,我们制作了一个骰子游戏,你可以掷5个骰子,每次最多3次,目标是获得尽可能多的匹配骰子。点数用2^(n-1)计算,其中n是匹配的骰子数。e、 如果你的骰子是2,3,3,4,4,你将得到2^1+2^1分,或4分。如果所有5个骰子都匹配,你会得到16分(2^(5-1)),如果你有3,3,2,3,2,你会得到6分(我花了一段时间才弄清楚分数是如何计算的,这就是为什么我要举这么多例子)。所以我对游戏的机制没有任何问题,我这样做是为了让你可以掷骰子3次等等,但是我真的很难在最后统计分数。这是我到目前为止的代码,用于计算分数的部分(die1等是卷的值,例如die1=3):

int matchCount=0;
int dice数组[]={die1,die2,die3,die4,die5};
系统输出println(“你的骰子是“+die1+”、“+die2+”、“+die3+”、“+die4+”、“+die5”);

对于(int i=0;i具有长度为6的
数组
/
哈希映射
,并将所有元素初始化为0。在掷骰子的每一卷上,增加数组中相应的索引。例如,如果掷4,则增加数组[3]最后,遍历数组并取大于1的值。将这些值用作
n
值并计算最终分数。

使用单独的数组来计算每个数字的出现次数

int diceArray[]= {die1,die2,die3,die4,die5};
System.out.println("Your dice are "+die1+", "+die2+", "+die3+", "+die4+", "+die5);
int[] rolls = new int[]{0,0,0,0,0,0}; //1 - 6 respectively
for (int i: diceArray){
    rolls[i-1] ++;
}
int score = 0;
for(int j: rolls){
    if(j>1){
        score += Math.pow(2,j-1);
    }
}
System.out.println("You scored "+score+" points!");

将matchCount设置为一个数组,该数组计算一个数字出现的次数:

int[] matchCount = {0,0,0,0,0,0};
for (int i=0;i<diceArray.length;i++)
{
    matchCount[diceArray[i]]++;
}

int total = 0;
for (int i=0;i<matchCount.length;i++)
{
    if (matchCount[i]>1)    //Like in examples, ignore matchCounts of 1
        total += Math.pow(2, matchCount[i]-1);
}
int[]匹配计数={0,0,0,0,0};

对于(int i=0;i我采用了一种稍微不同的方法,每次迭代后都要不断增加分数。尝试以下方法:

int matchCount = 0;
double score = 0.0;
int diceArray[]= {die1,die2,die3,die4,die5};
for (int i=0; i<diceArray.length; i++){
    int checkAgainst = diceArray[i];
    for (int j=0; j<diceArray.length; j++){
        if (checkAgainst == diceArray[j]){
            matchCount++;
        }
    }
    if (matchCount > 1){
        score += Math.pow(2,matchCount-2);
    }
    matchCount = 0;
}
System.out.println(score);
int matchCount=0;
双倍得分=0.0;
int dice数组[]={die1,die2,die3,die4,die5};
对于(int i=0;i
int matchCount = 0;
double score = 0.0;
int diceArray[]= {die1,die2,die3,die4,die5};
for (int i=0; i<diceArray.length; i++){
    int checkAgainst = diceArray[i];
    for (int j=0; j<diceArray.length; j++){
        if (checkAgainst == diceArray[j]){
            matchCount++;
        }
    }
    if (matchCount > 1){
        score += Math.pow(2,matchCount-2);
    }
    matchCount = 0;
}
System.out.println(score);