【问题标题】:Objective-C condition that only applies if other condition is met [closed]仅在满足其他条件时才适用的 Objective-C 条件[关闭]
【发布时间】:2017-10-05 20:24:42
【问题描述】:

我正在学习 Objective-C,我需要构建一个有两个“人”玩游戏的程序。要赢得比赛,一个人必须超过 21 分,并且必须领先至少 2 分。我不知道怎么写那个条件。

while (plyrOnePts <= 21 || plyrTwoPts <= 21) && 
(abs(plyrOnePts - plyrTwoPts) <= 2)) {

}

这就是我现在所拥有的。

【问题讨论】:

    标签: objective-c while-loop conditional-statements


    【解决方案1】:

    您确实应该展示您的代码,描述您尝试过的内容以及失败的原因。请记住,对于未来的问题,否则您只会被否决(就像您在我写这篇文章时所做的那样)并且没有答案。

    也就是说,让我们看看能否为您指明正确的方向。你似乎有一个while 声明,所以是这样的:

    while (not won condition)
    {
       // keep playing
    }
    

    而你被困在未获胜条件上。好吧,您应该已经知道有比较运算符;如大于&gt;;您可以将其用于单个测试的条件。您还应该知道您可以将条件(即 布尔值)与布尔运算符结合起来;比如&amp;&amp;。最后,“not”是另一个布尔运算符,它对单个值进行操作,可以简单地应用于您的“获胜条件”。

    如果您不知道比较或布尔运算符是什么,请立即停止并阅读一些文档!

    那么你的获胜条件是什么?

    一个人必须在21分以上

    英文是:

    (第一人得分大于21分)或(第二人得分大于21分)

    将其转换为变量引用(对于两个分数)、比较运算符(大于)和布尔运算符(或),你就有了一个条件。但是,您还有第二个要求:

    并且必须至少领先 2 分

    好吧,领先是分数的差异:

    第一人的分数减去第二人的分数

    但是,如果是第二个人在前面,那将是负面的。为了解决这个问题,我们使用一个函数来计算绝对值,它只是忽略符号的数字的大小。所以你需要的是:

    (第一人称得分减去第二人称得分)的绝对值

    搜索绝对值函数的文档,转换为变量引用,插入减号。

    现在我们已经介绍了如何进行比较,因此我们将跳过对至少 2 分差异的测试的拼写。如何结合这两个条件;得分大于 21 且领先至少为 2。好吧,线索是英文:and。上面我们使用了or,还有一个布尔and操作符。

    把它们放在一起,你的问题就解决了。

    HTH

    【讨论】:

    • 我用我无法开始工作的当前代码更新了我的问题。
    • 您添加的代码条件错误:条件为真,循环将继续,只有任何一个玩家得分小于或等于21 并且 两个分数相差在 2 以内。将其与我在答案中拼写的内容进行比较,您会发现它不一样。您已经有了大致的想法,只需对其进行调整,再试一次!
    【解决方案2】:
    while (game) {
    
    if ((player1.score>=21)&&(player1.score-player2.score>=2)) // player1 win
    if ((player2.score>=21)&&(player2.score-player1.score>=2)) // player2 win
    
    }
    

    【讨论】:

      【解决方案3】:

      为什么要为每件事使用单独的变量。如果可能,请尝试将相关内容捆绑到对象中。

      一旦你这样做了,你就可以通过在播放器类中编写一个方法来轻松实现你的目标,

      播放器.h

      @interface Player:NSObject
      @property (nonatomic, assign) NSInteger points;
      @property (nonatomic, strong) NSString *name;
      @property (nonatomic, assign) NSInteger lead;
      
      - (BOOL) playerDidWin;
      

      播放器.m

      @implementation Player {
      - (BOOL) playerDidWin {
         if(self.points > 21 && self.lead >= 2) {
             NSLog("Congrats %@ won the match", self.name);
             //Game Over.
           }
         }
      }
      

      【讨论】:

      • 虽然您不需要 points 在 h 文件中,但它可以是私有的,因为您不希望其他对象访问该属性。此外,lead 属性需要由其他对象计算,例如 manager 类等。
      猜你喜欢
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 2023-01-26
      • 2011-05-13
      • 2013-06-11
      • 2021-08-25
      • 2012-12-25
      相关资源
      最近更新 更多