scala 系列20190202

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

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

  • 一、一個數字若是是正數,則它的 signum 爲1;若是是負數,則 signum 爲 -1;若是是0,則 signum 爲0.編寫一個函數來計算這個值
  • 二、一個空的塊表達式{} 的值是什麼?類型是什麼?
  • 三、指出在 Scala 中何種狀況下賦值語句 x=y=1 是合法的。(提示:給 x 找個合適的類型定義)
  • 四、針對下列 Java 循環編寫一個 Scala 版 for(int i =10; i >= 0; i--) System.out.println(i);
  • 五、編寫一個過程 countdown(n: Int),打印從 n 到 0 的數字
  • 六、編寫一個 for 循環,計算字符串中全部字母的 Unicode 代碼的乘積。舉例來講,「Hello」 中全部字符的乘積爲 9415087488L
  • 七、一樣是解決前一個練習的問題,但此次不使用循環(提示:在 Scaladoc 中查看 StringOps)
  • 八、編寫一個函數 product(s: String),計算前面練習中提到的乘積
  • 九、把前一個練習中的函數改爲遞歸函數
  • 十、編寫函數計算 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 語句

咱們一條一條來看一下:spa

  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),這樣並不符合題意scala

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

而後調用便可code

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

聲明

原創手敲不易,轉載請註明出處,謝謝。我是 拉丁小毛,歡迎你們關注我哦,一塊兒交流,共同進步。有問題能夠 郵我哦(util.you.com@gmail.com)
相關文章
相關標籤/搜索