【问题标题】:Trouble with Scala's class and objectScala 的类和对象的问题
【发布时间】:2019-02-14 01:29:33
【问题描述】:

我无法在我的 Scala 代码中找到问题。下面的任务。

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 类型的值。构造函数的参数应该是进攻然后防守

•第三个状态变量名为“score”,类型为 Int

裁判将拥有:

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

•一个名为“Winner”的方法,它接受两个团队作为参数并返回得分较高的团队。如果两队得分相同,则返回一个新的 Team 对象,进攻和防守都设置为 0

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)
    }
}
}

【问题讨论】:

    标签: java scala class object


    【解决方案1】:

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

    删除val p = 部分。

    【讨论】:

    • 这似乎无法解决问题。
    • 究竟什么是“问题”?只需稍加改动,您的代码就可以毫无错误地编译。
    • 然后调试它。您还没有发布任何测试用例、示例输入、预期输出。没有它,我们只需要假设代码正在做它应该做的事情。
    • 调试是一件非常痛苦的事情,但是编写代码的每个人都必须学习如何去做。 println() 是您工具箱中的第一个工具。
    • 这是 2 个问题。 #1) 使用println() 了解返回意外值的方法内部发生了什么。 #2) 我创建了 2 个团队,将它们传递给 Referee.play() 并检查了它们更改后的 score 值。然后我将团队传递给Referee.Winner() 并检查了返回的内容。
    【解决方案2】:

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

    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))
        )
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      相关资源
      最近更新 更多