首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala的类和对象的问题

Scala的类和对象的问题
EN

Stack Overflow用户
提问于 2019-02-14 09:29:34
回答 2查看 162关注 0票数 4

我在查找Scala代码中的问题时遇到了问题。下面的任务。

代码语言:javascript
复制
Input: val team1: Team = new Team(8,6) 
       val team2: Team = new Team(6,4)

Output for 'play' method: team1.score = 4
                          team2.score = 0

Output for 'Winner' method: team1 

任务:

创建一个名为"Team“的Scala类和一个名为"Referee”的Scala对象。

团队将拥有:

·Int类型的状态值,表示球队进攻和防守的强度,并使用构造函数来设置这些值。构造函数的参数应该是攻击,然后是防御

·Int类型的第三个名为"score“的状态变量

裁判员将拥有:

·一个名为play的方法,该方法以两个Team对象为参数,不返回值。这种方法将通过设置每个输入队的得分等于他们的进攻减去另一个队的防守来改变每个输入队的状态。如果一支球队的进攻低于另一支球队的防守,他们的得分应该是0(没有负分)。

·名为Winner的方法,该方法以两个团队为参数,返回得分较高的团队。如果两支球队得分相同,则返回一个新的Team对象,其中攻防都设置为0

代码语言:javascript
复制
class Team(var offense: Int, var defense: Int){
      var score: Int = 0 //<-Updated Variable
}

object Referee{
def play(team1: Team, team2: Team) = {
    team1.score = team1.offense - team2.defense
    team2.score = team2.offense - team1.defense
    if (team1.offense < team2.defense){
    team1.score = 0
    }
    else if(team2.offense < team1.defense){
    team2.score = 0
    }
}
def Winner(team1: Team, team2: Team) = {
    if (team1.score > team2.score){
    team1
    }
    else if(team2.score > team1.score){
    team2
    }
    else{
    new Team(0, 0)
    }
}
}
EN

回答 2

Stack Overflow用户

发布于 2019-02-14 09:48:17

赋值没有返回值。因此,您将创建一个新的Team,并将其赋值给变量p,然后将其丢弃。

删除val p =部件。

票数 3
EN

Stack Overflow用户

发布于 2019-02-14 16:43:36

您设置的“任务”本质上是非功能性的,因此它不适合Scala。为了好玩,这里有一个更实用的方法来解决这个问题,它避免了任何可变值:

代码语言:javascript
复制
case class Team(offense: Int, defense: Int) {
  def score(other: Team): Int = Math.max(0, offense - other.defense)
}

case class TeamScore(team: Team, score: Int) {
  def beats(other: TeamScore): Boolean = score > other.score
}

case class Result(score1: TeamScore, score2: TeamScore) {
  def winner: Option[Team] =
    if (score1 beats score2) {
      Some(score1.team)
    } else if (score2 beats score1) {
      Some(score2.team)
    } else {
      None
    }
}

object Referee {
  def play(team1: Team, team2: Team): Result =
    Result(
      TeamScore(team1, team1.score(team2)),
      TeamScore(team2, team2.score(team1))
    )
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54681945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档