嗨我正试图获得艺术家名称在某些年份重复的次数,我有这个
var artists=Array.ofDim[String](994,2)//artist,year var artists2=Array.ofDim[String](250)//artist name var artists3 = Array.ofDim[Int](250)//number of times
并且用户必须输入ano1和ano2,它们是我们想要的年份保证金
val loop = new Breaks; for(i <- 0 to 993){//copiamos loop.breakable{ for(j<- 0 to 249){ if(artists2(j).contentEquals("NULL") && artists(i)(1).toInt>=ano1 && artists(i)(1).toInt<=ano2){ artists2(j)=artists(i)(0) artists3(j)= 1 loop.break; }else if(artists(i)(0).contentEquals(artists2(j)) && artists(i)(1).toInt>=ano1 && artists(i)(1).toInt<=ano2){ artists3(j)= artists3(j)+1 loop.break; } } } } println(artists2.mkString("\n")) println(artists3.mkString(","))
由于某种原因,我输入if后无法正常工作或j自我添加1因为每次都在artists2中创建一个新元素而不是将其添加到artists3
我得到的输出是艺术家3填充1,因为由于某种原因它永远不会检查if的其他部分
如果这听起来有点苛刻,我很抱歉,但是你的代码有很多问题,很难知道从哪里开始.
主要问题是1)你的代码不是很像scala,2)你正在使用数据结构和变量名来设计使事情尽可能难以理解.
这是重新设计事物的简短尝试.它可能无法满足您的所有要求,但它可能会让您朝着更好的方向前进.
val mockdata = List( ("Tom", 2001) , ("Sue", 2002) , ("Joe", 2002) , ("Sue", 2005) , ("Sue", 2004) , ("Jil", 2001) , ("Tom", 2005) , ("Sue", 2002) , ("Jil", 2012) ) def countArtists( dataSet: List[(String,Int)] , anoStart: Int , anoEnd: Int): Map[String,Int] = { val artists = for { (artist, year) <- dataSet if year >= anoStart && year <= anoEnd } yield artist artists.distinct.map(name => name -> artists.count(_ == name)).toMap } val count2002to2011 = countArtists(mockdata, 2002, 2011)
此时,您可以使用结果获取有趣的信息.
scala> count2002to2011.keys // all artists within the time period res0: Iterable[String] = Set(Sue, Joe, Tom) scala> count2002to2011.values.sum // total count within the time period res1: Int = 6 scala> count2002to2011("Sue") // count for just this artist res2: Int = 4