我正在试图找出我的解决方案的coursera课程,第三次作业的错误。除了将TweetSet转换为降序tweetList的方法之外,我还计算出了其他所有内容。
以下是主要的方法:非空集的mostRetweeted。
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
def mostRetweeted: Tweet = null最后,该方法使用累加器来形成列表,使用上述方法计算最多转发的tweet。
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)
}您可能已经注意到,我为Nil向TweetList添加了一个add方法
def add(tweet: Tweet): TweetList = new Cons(tweet,Nil)为Cons
def add(tweet: Tweet): TweetList = new Cons(head,tail add tweet)我也尝试过一些在线解决方案,但这些方法也不起作用。akojq/scala-week-3就像我的解决方案一样,它给出了一个“几乎”降序列表,但是列表并不是完全降序的。无论如何,我已经花了一整天的时间并且通过了这项任务,所以我将继续到下个星期。
发布于 2017-05-22 03:48:26
您的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语句中。
https://stackoverflow.com/questions/44102779
复制相似问题