首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Coursera赋值对象:第3周descendingByRetweet

Coursera赋值对象:第3周descendingByRetweet
EN

Stack Overflow用户
提问于 2017-05-21 23:33:42
回答 1查看 2.6K关注 0票数 2

我正在试图找出我的解决方案的coursera课程,第三次作业的错误。除了将TweetSet转换为降序tweetList的方法之外,我还计算出了其他所有内容。

以下是主要的方法:非空集的mostRetweeted。

代码语言:javascript
复制
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

代码语言:javascript
复制
def mostRetweeted: Tweet = null

最后,该方法使用累加器来形成列表,使用上述方法计算最多转发的tweet。

代码语言:javascript
复制
   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方法

代码语言:javascript
复制
def add(tweet: Tweet): TweetList = new Cons(tweet,Nil)

为Cons

代码语言:javascript
复制
def add(tweet: Tweet): TweetList = new Cons(head,tail add tweet)

我也尝试过一些在线解决方案,但这些方法也不起作用。akojq/scala-week-3就像我的解决方案一样,它给出了一个“几乎”降序列表,但是列表并不是完全降序的。无论如何,我已经花了一整天的时间并且通过了这项任务,所以我将继续到下个星期。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-22 03:48:26

您的descendingByRetweet代码看起来是正确的,可以写得更短。我认为您的问题可能在mostRetweeted方法中。在守则的这一部分:

代码语言:javascript
复制
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 = 5mostRetweetedRight.retweets = 0mostRetweetedLeft.retweets = 5的情况。返回值将是mostRetweetedRight,这显然是不正确的。您应该根据所期望的结果将>=<=添加到if语句中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44102779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档