[英]Trouble with Scala's class and object
我在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類型的狀態值表示團隊攻擊和防御的強度,使用構造函數來設置這些值。 構造函數的參數應該是進攻然后防御
•第三個狀態變量,名為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)
}
}
}
分配沒有返回值。 因此,您要創建一個新的Team
,並將其分配給變量p
,然后將其丟棄。
刪除val p =
part。
您設置的“任務”本質上是不起作用的,因此它與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))
)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.