scala 系列20190202

今天看到一篇關於 scala 入門基礎的提問點,我呢,就在這裏簡單做一下釋疑,純粹是爲了拋磚引玉,特別期待各位同行的不吝賜教

我先來貼一下原帖的提問點:

  • 1、一個數字如果是正數,則它的 signum 爲1;如果是負數,則 signum 爲 -1;如果是0,則 signum 爲0.編寫一個函數來計算這個值
  • 2、一個空的塊表達式{} 的值是什麼?類型是什麼?
  • 3、指出在 Scala 中何種情況下賦值語句 x=y=1 是合法的。(提示:給 x 找個合適的類型定義)
  • 4、針對下列 Java 循環編寫一個 Scala 版 for(int i =10; i >= 0; i--) System.out.println(i);
  • 5、編寫一個過程 countdown(n: Int),打印從 n 到 0 的數字
  • 6、編寫一個 for 循環,計算字符串中所有字母的 Unicode 代碼的乘積。舉例來說,“Hello” 中所有字符的乘積爲 9415087488L
  • 7、同樣是解決前一個練習的問題,但這次不使用循環(提示:在 Scaladoc 中查看 StringOps)
  • 8、編寫一個函數 product(s: String),計算前面練習中提到的乘積
  • 9、把前一個練習中的函數改成遞歸函數
  • 10、編寫函數計算 x^n,其中 n 是整數,使用如下的遞歸定義:
    x^n = y^2,如果 n 是正偶數的話,這裏的 y = x^(n/2);
    x^n = x*x^(n-1),如果 n 是正奇數的話;
    x^0 =1;x^n = 1/x^(-n),如果 n 是負數的話;不得使用 return 語句

我們一條一條來看一下:

  1. 這第一題我沒大明白什麼是 signum,所以這個先放下,留給各位同行大神來解答嘍,剛好也給我講講哦,哈哈哈
  2. 圖片描述
  3. 首先我們知道,x=y=1 這是肯定不對的,因爲它實際上是這樣解析的 x=(y=1),而 y=1 是賦值語句,其返回值是 Unit,所以就相當於是將一個 Unit 賦給 x 了,但是文中又提示給 x 找個合適的類型定義,因此我們只需要將 x 給聲明爲 var 類型即可 var y = 0; var x = y = 1;
  4. 這個嘛就比較簡單了 for( i <- 0 to 10 ) println(i);
  5. 首先要說明一下什麼是過程,它與函數有什麼區別?
在 scala 中對於不返回值的函數有特殊的表示法,如果函數體包含在花括號當中,但是沒有前面的 = 號,那麼返回類型就是 Unit,這樣的函數就被稱爲過程(procedure),過程不返回值,我們調用它僅僅是爲了它的副作用
由於過程不返回任何值,所以我們可以省略 = 號
所以知道了這一點後,我們再來實現題中的要求
def coutdown(n : Int){
    for( i <- (n + 1) until(0,-1)) println(i);
}

注意這裏不要寫成 for(i <- 0 to 10),這樣並不符合題意

  1. 這道題也是有一個陷阱的,就是在聲明 s 的時候一定要聲明爲 Long 型,只要知道這一點後,就比較簡單了
def countUnicodeMutiple(str : String) = {
    var s : Long = 1;
    for(i <- str){
      s *= i.toInt;
      println(s);
    }
  }

然後調用即可

後三道題我先放下,公司今天(2019年2月2日 16:39:45)走的都沒人了,數我離家最遠,屬我最後一個離開,哎,我也寫不下去了,要收拾收拾回家了(好難受,喜歡公司裏的一個女的,但是人家特別討厭我;不說了,明年見)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章