我想弄清楚我的Scala课程,第三次作业的解决方案有什么不对。除了将TweetSet转换为降序tweetList的方法之外,我已经找到了其他所有内容。
以下是主要方法:mostweetweeted for Non-Empty Set。
def mostRetweeted: Tweet = {
val mostRetweetedLeft = left.mostRetweeted
val mostRetweetedRight = right.mostRetweeted
if(mostRetweetedLeft != null && mostRetweetedRight!=null)
if(elem.retweets > mostRetweetedRight.retweets && elem.retweets > mostRetweetedLeft.retweets)
return elem
else if(elem.retweets > mostRetweetedRight.retweets && elem.retweets < mostRetweetedLeft.retweets)
return mostRetweetedLeft
else
return mostRetweetedRight
else if(mostRetweetedLeft == null && mostRetweetedRight!=null)
if(elem.retweets > mostRetweetedRight.retweets)
return elem
else
return mostRetweetedRight
else if(mostRetweetedLeft != null && mostRetweetedRight==null)
if(elem.retweets > mostRetweetedLeft.retweets)
return elem
else
return mostRetweetedLeft
else
return elem
}
mostRetweeted for empty Set
def mostRetweeted: Tweet = null
最后这个方法,使用累加器通过上述方法形成列表来计算转发最多的推文。
def descendingByRetweet: TweetList = {
def descendingByRetweet(tweetSet: TweetSet, tweetList : TweetList):TweetList = {
val mostTweeted:Tweet = tweetSet.mostRetweeted
// empty set returns null for mostRetweeted method
if(mostTweeted == null)
return tweetList
else {
descendingByRetweet(tweetSet.remove(mostTweeted),tweetList.add(mostTweeted))
}
}
descendingByRetweet(this,Nil)
}
您可能已经注意到我向TweetList添加了一个add方法 对于Nil
def add(tweet: Tweet): TweetList = new Cons(tweet,Nil)
对于缺点
def add(tweet: Tweet): TweetList = new Cons(head,tail add tweet)
我也尝试了一些在线解决方案,但那些也没有用。 https://coderwall.com/p/_akojq/scala-week-3 就像我的解决方案一样,这给了一个&#34;几乎&#34;降序列表,但列表并不是完全降序。无论如何,我已经度过了整整一天并完成了任务,所以我将继续下一周。
答案 0 :(得分:1)
descendingByRetweet
的代码看起来正确,以为可以写得更短。我认为你的问题可能在mostRetweeted
方法中。在这部分代码中:
if(elem.retweets > mostRetweetedRight.retweets && elem.retweets > mostRetweetedLeft.retweets)
return elem
else if(elem.retweets > mostRetweetedRight.retweets && elem.retweets < mostRetweetedLeft.retweets)
return mostRetweetedLeft
else
return mostRetweetedRight
考虑例如elem.retweets = 5
,mostRetweetedRight.retweets = 0
和mostRetweetedLeft.retweets = 5
的情况。返回值为mostRetweetedRight
,这显然是不正确的。您应该根据所需的结果将>=
和<=
添加到其中一个if
语句中。