0

我对Scala很不习惯,所以我想要做的就是执行一个函数,该函数可以获取先前创建的列表的参数。然后我通过整个列表读取小写的每个元素来查找关键字。在scala中使用列表作为输入运行函数

最后,我计算了单词的数量并返回了该值。我的项目创建为Scala类,顺便说一下,在我的代码中,似乎小写字母不能读取下面的每个列表元素案件。

如果我把所有的代码移到一个可以工作的函数之外,但我不明白为什么在函数式的方法中它不会通过。

请家伙,给我一只手弄明白,谢谢 AU

代码:

object practiqueI extends App{ 
//exercise 1 
/* val liste = List(15,39,22,98,37,19,5) 
    var z : Int = 0 

    for (i <- liste){ 

    z = z + i 
    } 

    println("the total is:",z)*/ 

//exercise 2 
    val list_txt = List("Introduction à la programmation ", 
    "Practique de la programmation", 
    "Structure de données", 
    "principe de la programmation", 
    "Algorithme","Langages de programmation") 


    def wordrepeted(some: _*) : Int = { 
    var counter_word:Int = 0 
    var counter_nword: Int =0 
    val word_cle: String = "programmation" 
    var exist_word: Boolean = false 

    for (i <- some) { 
     var test: String = i.toLowerCase 
     if (test.contains(word_cle)) { 
     counter_word += 1 
     exist_word = true 
     } else { 
     counter_nword += 1 
     } 
    } 
    return counter_nword 
    } 

    wordrepeted(list_txt) 

} 

回答

2

嗯,首先,如果你想有方法,它采用字符串列表,那么它应该看起来像:

def myMethod(someList: List[String]) = {...} 

其次,Scala的List提供的方法,通过它的元素,看起来像find()exist(),count()等我强烈建议使用它们。这些方法使用布尔函数作为参数。铁。检查是否列表包含包含某些子看起来像元素:包含子

someList.exists(s => s.contains("programmation")) 

计数元素非常相似:

someList.count(s => s.contains("programmation")) 

第三件事情,你不需要使用return声明斯卡拉,最后的表达式被作为返回值。

所以基本上你的方法来计算含子元素看起来像:

def countElements(allElements: List[String], substring: String): Int = 
    allElements.count(s => s.toLowerCase.contains(substring.toLowerCase)) 

看起来你不得不与其他编程语言的一些经验,但Scala是相当新的给你。在开始这样的练习之前,我真的推荐阅读一些教程,例如:https://www.tutorialspoint.com/scala/index.htm只是为了了解Scala中有些东西的工作原理,因为它有很多语法糖和有用的“快捷方式”。

+0

你怎么能在一个方法中定义两个返回元素,例如你在最后返回一个Int的例子,但是如果你想返回2个Ints呢?谢谢 –

+0

您可以将方法返回类型更改为'Tuple2 [Int,Int]'。通过关闭括号fe .:'(int1,int2)'中的2个变量可以轻松创建元组。请参阅:https://www.tutorialspoint.com/scala/scala_tuples.htm –

相关问题