“如果”声明替代品

时间:2012-03-02 19:26:22

标签: java if-statement

我正在做我的作业,而且我坚持一些逻辑(我认为我正确地使用了这个术语?)。我正在编写一个应用程序,显示12个编号为1-12的按钮,2个骰子图片和一个滚动按钮。

玩家掷骰子(2,6双面骰子)和他得到的任何数字,他可以用来“掩盖”12个数字中的一些。例如,假设他掷骰子并获得3和5.他可以选择是否覆盖3和5,或者两个数字的总数 - 8(我是否提到我是数学智商? )。

游戏的目标是使用最少量的卷来覆盖所有数字。

我遇到的问题是,我认为是if语句:

if (die1 == 3 && die2 == 5) {
  player can cover 3 and 5, or 8, but not both
}

现在,我认为这是有效的,但如果我把所有这些都写出来,那么if语句就会是36(给予或取零)。有更简单的方法吗?

7 个答案:

答案 0 :(得分:5)

根据您的描述,我认为播放器可以选择die1die2die1 + die2,以便查看用户是否选择了有效值,只需要一个。

if (cover == die1 or cover == die2 or cover == ( die1 + die2)) {
    //valid..
}

答案 1 :(得分:2)

如果需要声明则不。播放器可以涵盖die1die2die1+die2

答案 2 :(得分:2)

这是使用开关案例IMO的一个很好的例子。 这是2个开关,每个开关有6个。

答案 3 :(得分:1)

在玩家试图掩盖某事之前不要检查。通过仅验证输入,您可以将所有内容简化为一个if语句。

如果你需要知道所有可能性(也许是为了向玩家显示可能的动作),那么......你仍然不需要所有那些if语句。只需突出显示与骰子滚动相匹配的按钮,并仅接受这些按钮作为输入;你想要在数组或地图中按它们的值(例如“1”)索引它们作为检索它们的方法。

答案 4 :(得分:1)

你知道有两个骰子,你总有三种遮盖选择。大概在代码的其他地方,你要将你的覆盖选项与数字进行比较。像

这样的东西
int[] covered = { die1, die2, die1+die2 };
// ... other stuff
if (comparisonValue > 6) {
  // maybe do special stuff since this uses both dice
  if (comparisonValue == covered[2]) {
    // covered/coverable behavior
  } else {
    // not
  }
} else {
  // maybe do special stuff since this only uses one die
  if (comparisonValue == covered[0] || comparisonValue == covered[1]) {
    // covered/coverable behavior
  } else {
    // not
  }
}

首先为您提供所涵盖的内容,然后简单地使用它。您还可以在数组上foreach为覆盖的数字做一些事情,ala

for (int c : covered) {
  // do stuff with c because it's covered
}

这是相当脆弱的,但灵活的答案(例如,将结果转储到Collection)对于6面,整数面部骰子来说方式过度,并且真的< / em>灵活的答案(例如,容纳不同数量的骰子,将面孔特殊组合成结果)就像是针对这一特定问题的核武器。

针对您的特定问题进行编辑,我会执行类似

的操作
// start new turn, disable all buttons
// get rolls
int[] coverable = { die1, die2, die1+die2 };
for (int covered : coverable ) {
  // enabled covered button
}

如果玩家可以根据新的结果更改前一卷中的1-12中的哪一个,那么你可以根据你想给他们多少帮助来获得一些乐趣。

答案 5 :(得分:0)

我可能会创建2个新对象并将它们与查找表一起使用,如下所示:

class TossResult{
    int firstDie;
    int secondDie;
 }

Class Coverage{
    TossResult tossResult;

    int getThirdNumber(){
        return tossResult.firstDie + tossResult.secondDie;
     }
}

然后在应用程序启动时,填充地图:

HashMap<TossResult, Coverage> lookup = new HashMap<>();
for (int i = 0, i < SIDES_ON_DIE; i++){
    for (int j = 0, j < SIDES_ON_DIE; j++){
        TossResult tempResult = new TossResult(i,j);
        Coverage tempCoverage = new Coverage(tempResult);
        lookup.put(tempResult, tempCoverage);
    }
}

用户掷骰子后,创建一个新的TossResult并执行lookup.get(tossResult)

答案 6 :(得分:0)

您还可以创建一个包含12个int或bool的数组。初始化所有12个元素(比如0或false)。然后,对于每个角色,你可以做一些喜欢的事情:

if (false == myArray[die1Value] && false == myArray[die2Value]) {
    myArray[die1Value] = true;
    myArray[die2Value] = true;
} else if (false == myArray[die1Value + die2Value]) {
    myArray[die1Value + die2Value]
} else if (false == myArray[die1Value] || false == myArray[die2Value]) {
    if (false == myArray[die1Value]) {
        myArray[die1Value] = true;
    }
    if (false == myArray[die2Value]) {
        myArray[die2Value] = true;
    }
} else {
    // all 12 covered
}

当然,你可以再修改一下这段代码。 所述目标“游戏的目标是使用最少量的卷来覆盖所有数字。”是不可行的,真的。你可以做的最好的事情是使用概率来知道你是否应该首先覆盖1和2,1和2或3的卷: - )