Проблема с классом и объектом Scala - PullRequest
0 голосов
/ 14 февраля 2019

У меня проблемы с поиском проблемы в моем коде 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 

Задача:

Создайте класс Scala с именем «Команда» и объект Scala с именем «Рефери».

Команда будет иметь:

• Укажите значения типа Int, представляющие силу нападения и защиты команды с помощью конструктора для установки этих значений.Параметры для конструктора должны быть нарушены, тогда защита

• Третья переменная состояния с именем «Score» типа Int

Рефери будет иметь:

• Метод с именем «play»msgstr "который принимает два объекта Team в качестве параметров и не возвращает значение.Этот метод изменит состояние каждой входной команды, установив их оценки равными их нападению минус защита другой команды.Если нарушение Команды меньше, чем защита другой Команды, их счет должен быть 0 (без отрицательных оценок)

• Метод с именем «Победитель», который принимает две команды в качестве параметров и возвращает Команду с более высоким счетом.Если обе команды имеют одинаковое количество очков, верните новый объект Команды, в котором нападение и защита установлены на 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)
    }
}
}

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

«Задание», которое вы ставите, по своей сути не работает, поэтому оно не подходит для 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))
    )
}
0 голосов
/ 14 февраля 2019

Назначения не имеют возвращаемых значений.Итак, вы создаете новый Team, присваиваете его переменной p, а затем выбрасываете его.

Удалите часть val p =.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...