Scala編程初級實踐
名稱
Scala編程初級實踐
目的
1.掌握Scala語言的基本語法、數據結構和控制結構;
2.掌握面向對象編程的基礎知識,能夠編寫自定義類和特質;
3.掌握函數式編程的基礎知識,能夠熟練定義匿名函數。熟悉Scala的容器類庫的基本層次結構,熟練使用常用的容器類進行數據;
4.熟練掌握Scala的REPL運行模式和編譯運行方法。
內容與結果分析
計算級數
請用腳本的方式編程計算并輸出下列級數的前n項之和Sn,直到Sn剛好大于或等于q為止,其中q為大于0的整數,其值通過鍵盤輸入。
例如,若q的值為50.0,則輸出應為:Sn=50.416695。請將源文件保存為sn.scala,在REPL模式下測試運行,測試樣例:q=1時,Sn=2;q=30時,Sn=30.891459;q=50時,Sn=50.416695。
要求:選取以下任意兩種方式完成
①repl環境下一行一句運行
q=1時
q=30時
q=50時
②腳本文件test1.scala存放不帶有對象和main的所有代碼,在REPL中:load運行
先編寫sn.scala
當q=1時
當q=30時
當q=50時
2 使用scala語言編程輸出九九乘法表
創建99.scala
輸入代碼
import scala.collection.mutable.ArrayBuffer
object NineNineForm {
def main(args: Array[String]): Unit = {
println("************ 九九乘法表 **********")
for(i<- 1 until 10){
val array=new ArrayBufferString
for(j<- 1 until i+1){
var a:String =j+""+i+"="+ij+" "
array+=a
}
array.foreach(print)
println()
}
}
}
3 統計List列表中中單詞出現的頻率,例如:
創建lzlcipin.scala
輸入代碼
val list1=List(“I am a student”,” love database”,”Hadoop is good”,”spark is good”)
輸出結果為:鍵值對形式輸出
import collection.mutable.Map
val list1 = List(“I am lizhuolang” , “I love lizhuolang” , “Hadoop is good” , “Scala is good”)
var m = Map.empty[String , Int]
val list2 = list1 flatMap{a => a.split(" ")}
val f : String => Unit = {w =>
if (m.contains(w)) m(w) += 1
else m(w) = 1
}
list2.foreach(f)
m foreach {kv => println(kv._1,kv._2)}
4 統計學生成績
創建grade1.txt
測試樣例文件的路徑
將每行按空白字符(包括空格/制表符)分開
由于后面涉及操作列表的函數,故用toList將Iterator改為List
originalData的類型為List[Array[String]]
originalData:List[Array[String]]類型
獲取文件中第一行信息(表頭)
獲取第一行中的課程名
去除第一行剩下的數據
allStudents:List[Array[String]]類型
按性別劃分為兩個容器
男生人數和女生人數
for對每門課程生成一個三元組,分別表示平均分,最低分和最高分
for循環執行3次,1次對應一門課程,每次for循環會生成一個temp,該temp是一個List類型,用于存放某門課程的分數,語句val temp = allStudents map {elem=>elem(i).toDouble}表示對 allStudents進行映射操作,allStudents原來是List類型,故temp也是List類型。具體映射方法是:將allStudents的每一行映射成該行第i列的Double表示。下表是以第一次for循環為例,輸出的temp結果表示:
for推導式,將for的結果放在result中,result是一個向量,向量中的元素個數等于課程門數,每一個元素是一個三元組tuple,對每門課程生成一個三元組,分別表示平均分,最低分和最高分
輸出結果
輸出男生的結果
輸出女生的結果
出現的問題及解決方案
1.運行代碼時出現編碼錯誤
錯誤:
錯誤原因:
因為wps里的空格和linux里的空格編碼方式不同,空格有如下分類
\u00A0:不間斷空格,主要用在office中,讓一個單詞在結尾處不會換行顯示
\u0020:半角空格(英文符號),代碼中常用的
?\u3000:全角空格(中文符號),中文文章中使用
解決辦法:
我們無法看出空格的區別,但是編譯器可以,所以只能手動更換代碼里所有的空格
2.數組越界
錯誤:
數組越界
解決辦法:
網上找的方法都沒用,最后自己手動重輸了一下grade1.txt才得以解決
Scala
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。