【发布时间】:2017-07-02 10:33:26
【问题描述】:
我正在使用 Java 在 Android Studio 中开发游戏,但我在计算分数的方法上遇到了一些问题。基本上在游戏中我有一个骰子数组,其值从 1 到 6。在这些值中,我需要找出特殊值出现的次数。
现在我有一种方法可以很好地查找所有单个值(如所有值为 5 的骰子),以及两个骰子加起来为特殊值(如 2 + 3 或 1 + 4)。但是当两个以上的骰子相加时(如1 + 1 + 3),它不会找到特殊值
示例:如果我有值 [1, 2, 2, 2, 3, 5] 的骰子 结果应该是三个“numberOfPairs”(1+2+2、2+3、5),因此该方法应该返回 15,但对我来说它只返回 10。
我真的很感激一些想法如何改变这种方法以更好地工作。
这是我现在一直在研究的方法:
public static int evaluatePoints(Dice dices[], int sumToReach) {
int values[] = new int[dices.length];
int numberOfPairs = 0;
int left = 0;
int right = values.length - 1;
for(int i = 0; i < dices.length; i++){
values[i] = dices[i].getValue();
if(values[i] == sumToReach){
numberOfPairs++;
values[i] = 0;
}
}
Arrays.sort(values);
while (values[right] > sumToReach + values[0]) {
right--;
}
while (left < right) {
if (values[left] + values[right] == sumToReach) {
numberOfPairs++;
left++;
right--;
}
else if(values[left] + values[right] < sumToReach) {
left++;
}
else right--;
}
return numberOfPairs*sumToReach;
}
【问题讨论】:
-
请在minimal reproducible example 上发布失败的
Dice dices[]示例 -
@c0der 示例:我正在寻找值 5。如果我有值 [1, 2, 2, 2, 3, 5] 的骰子,结果应该是三个“numberOfPairs”(1+2+2、2+3、5),因此该方法应该返回 15,但是对我来说它只返回 10。
-
如果考虑所有组合
1+2+2应该出现两次,2+3应该出现两次,3+2应该出现3次,2+2+1也是一个有效的组合 -
您想要一个组合吗?我的意思是对于一个三元组,只有一个三元组还是所有可能存在的三元组?
-
@VidorVistrom 所以基本上在游戏中我的玩家掷了六个骰子,然后游戏应该从这些骰子中计算出这些骰子中有多少加起来是一个特殊的数字。但是每个骰子只能使用一次。因此,如果骰子变为 [1, 2, 2, 2, 3, 5] 并且搜索到的值为 5,那么我希望该方法输出存在 3 个子集加起来为 5(1 + 2 + 2 和 2 + 3 和 5。不是 3 + 2 等,因为所有骰子都已经用过了)